java - 如何从 application.properties 文件中获取测试用例的参数
问题描述
我有以下控制器类
@Component
public class Controller{
@Value("${details}")
private String detail1;
@Value("${otherdetails}")
private String detail2;
public ModelClass getSomeDetails(String name, int age) {
Serviceclass serviceobject = new Serviceclass();
//some Code
serviceobject.doSomething(name, age, detail1, detail2);
}
}
完成此操作后,我需要在测试用例中测试此方法。我的测试类如下。我在 /src/test/resources 文件夹中有 application.properties 文件
@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(locations="classpath:application.properties")
public class testClass{
@Test
public void getDetails() {
Controller controllerObject = new Controller();
controllerObject.getSomeDetails("name", 22);
//Other code
}
}
当我这样做时,application.properties 有 details 和 otherdetails 参数,但它返回 null。
我应该如何使用它们来获取 Controller 类中的值?
解决方案
您需要让 Spring 实例化您的Controller
类,而不是new
自己手动执行:
@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(locations="classpath:application.properties")
public class testClass{
@Autowired
private Controller controllerObject;
@Test
public void getDetails() {
controllerObject.getSomeDetails("name", 22);
//Other code
}
@TestConfiguration
static class TestConfig {
@Bean
public Controller controller() {
return new Controller();
}
}
}
请注意,您也可以替换@RunWith(SpringJUnit4ClassRunner.class)
为@RunWith(SpringRunner.class)
.
除了添加内部类,您还可以让 Spring 测试通过使用@SpringBootTest
. 如果您知道要测试应用程序的哪一部分,则可以使用测试切片获得更好的性能。
推荐阅读
- android - Android dagger 依赖循环
- python - 重构多线程日志文件的pyparsing解析结果
- ruby - 在 Ruby gem 中缓存来自外部源的数据
- javascript - 在推送数据之前等待数组元素存在
- lisp - 将两个列表附加在一起
- javascript - 所有导入包的 ReactJs no-undef
- python - arcpy出错后重启python脚本,直到成功
- ruby-on-rails - Rails - 如何分配用户版主权限?
- emacs - elisp:在回显区域输出彩色消息
- arduino - 我想使用 TM4C123 TIVA C LaunchPad 作为 ICSP Arduino 程序员