我有以下Controller类
@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类中的值?
答案 0 :(得分:1)
您需要让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)
。
除了添加内部类,您还可以通过使用@SpringBootTest
注释测试来使Spring测试启动您的完整应用程序。如果您知道要测试应用程序的哪一部分,则可以使用test slicing获得更好的性能。
答案 1 :(得分:1)
请勿手动实例化控制器,而应将控制器AutoWire
插入测试类。
@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(locations="classpath:application.properties")
public class testClass{
@Autowired Controller controllerObject;
@Test
public void getDetails() {
controllerObject.getSomeDetails("name", 22);
//Other code
}
}