当前位置: 首页 > 知识库问答 >
问题:

使用JUnit 5进行Spring测试属性

袁枫涟
2023-03-14

我现在开始使用JUnit5和Spring Boot的测试。我有一个包含控制器、服务和存储库的Rest API,以及一些使用@value从我的application.properties获取属性的utils类。我没有使用Spring中的“profiles”,只是使用默认配置。

我的应用程序主:

@EnableScheduling
@EnableDiscoveryClient
@ComponentScan
@SpringBootApplication
public class MyRestApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyRestApiApplication.class, args);
    }

}
@Component
public class JWTUtils implements Serializable {

    @Value("${jwt.validity}")
    public String JWT_TOKEN_VALIDITY;

    @Value("${jwt.secret}")
    private String secret;

    // There's no constructors in the class.
}
@SpringBootTest
class MyRestApiApplicationTests {

    @Test
    void contextLoads() {
    }
}
class JWTUtilsTest {

    JWTUtils jwtUtils;

    @Test
    void getUsernameFromToken() {
        jwtUtils = new JWTUtils();
        assertNotNull(jwtUtils.JWT_TOKEN_VALIDITY);
        String username = jwtUtils.getUsernameFromToken("token-here");
        assertNotNull(username);
        assertEquals(username, "admin");
    }
}

我的项目的体系结构是:

main/
├── java/
│   ├── com.foo.controller/
│   ├── com.foo.model/
│   ├── com.foo.repository/
│   └── com.foo.service/
└── resources/
    ├── application.properties
    ├── banner.txt
    
test/
├── java/
│   ├── com.foo.controller/
│   ├── com.foo.model/
│   ├── com.foo.repository/
│   └── com.foo.service/
└── resources/
    ├── application-test.properties

我在主测试类中尝试了“@TestPropertySource”和/或“@ActiveProfiles(”Test“)”,但没有成功。还尝试使用“@RunWith(SpringRunner.class)”。

当我运行这个测试时,我的“secret”值是“null”,它应该是我的application.properties中存在的值

我尝试在jwtutils中放入“@autowired”,但结果为空。@Autowired不工作。

共有1个答案

姜乐语
2023-03-14
  1. jWTutilstest不是Spring Boot测试。因此没有Spring引导魔法(如注入配置值)
  2. 您正在自己创建jWTUTILS测试实例。要让spring施展它的魔力,您必须让spring创建它(例如,使用@autowired进行注释,并使jWTutilstest成为Spring Boot测试。
 类似资料:
  • 我发现Junit5从5.3版本开始就支持并行性,但我找不到任何关于如何使用csv源代码运行并行测试的参考。你有什么建议吗?

  • Gradle4.6增加了对JUnit5的支持。 只要我没有用于例如集成测试的另一个sourceset,这对我是有效的:我不知道如何在我的集成测试中启用。 我所能做的是让任务与新的JUnit5支持一起工作,但我的任务使用JUnit5控制台并从命令行运行测试。最后,我在gradle中放弃对JUnit5的支持,并回滚到使用JUnit5控制台进行两个测试。 除了之外,如何在其他任务上启用Gradle4.6

  • 我有一个Spring Boot应用程序,想为控制器编写集成测试。它是我的: 它是我的控制器: 我创建了一个测试(JUnit5): 哪种方法更好?

  • 右键点击Run可以很好地工作。我用 Intellijidea 2017.1.5, Gradle, JunitPlatformVersion='1.0.0-M6', JunitJupiterVersion='5.0.0-M6'

  • 我遇到了无法使用Maven运行JUnit5测试的问题。在IDE中运行它们工作正常,但使用“mvn测试”会产生以下输出: 这是我的测试课程: pom: 我做了一些研究,我认为这可能与混合JUnit4和JUnit5特性有关,这导致maven surefire插件无法运行测试。然而,我找不到那些剩余的JUnit4特性可能在哪里。我将感谢任何帮助。

  • 示例: https://www.baeldung.com/junit-5-条件测试执行 唯一仍然有效的排除是@Ignore标志。 为了使测试正常工作,我还需要配置什么测试吗? 我还有这个: 从gradle.build中的dependencis中,我有://https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api测试