首页 > 解决方案 > 如何从 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 类中的值?

标签: javaspring-bootspring-boot-test

解决方案


您需要让 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. 如果您知道要测试应用程序的哪一部分,则可以使用测试切片获得更好的性能。


推荐阅读