我现在开始使用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不起作用。
1条答案
按热度按时间mbzjlibv1#
JWTUtilsTest
不是Spring启动测试。因此没有spring引导魔法(比如注入配置值)您正在创建的测试示例
JWTUtils
你自己。要让spring施展它的魔法,你必须让spring创造它(例如,用@Autowired
制造JWTUtilsTest
Spring Boot测试。