spring测试属性

kgsdhlau  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(396)

我现在开始使用JUnit5和SpringBoot的测试。我有一个带有控制器、服务和存储库的restapi,还有一些使用 @value 从我的 application.properties . 我没有使用spring的“profiles”,只是使用默认配置。
我的主要应用程序:

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

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

}

使用 @value :

@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 我试着把“@autowired”放进我的电脑里 JWTUtils jwtUtils 但结果是空的。@autowired不起作用。

mbzjlibv

mbzjlibv1#

JWTUtilsTest 不是Spring启动测试。因此没有spring引导魔法(比如注入配置值)
您正在创建的测试示例 JWTUtils 你自己。要让spring施展它的魔法,你必须让spring创造它(例如,用 @Autowired 制造 JWTUtilsTest Spring Boot测试。

相关问题