如何从application.properties文件中获取测试用例的参数

时间:2019-09-10 06:38:10

标签: java spring-boot spring-boot-test

我有以下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类中的值?

2 个答案:

答案 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
  }
}