当前位置: 首页 > 知识库问答 >
问题:

如何从正在测试的方法从application.properties中读取变量

谭勇
2023-03-14
@Service
public class A {

  @Value("${a.b.c}")
  private String abc;

  public void foo() {
   sout(abc);
  }
}
@SpringBootTest
@SpringBootConfiguration
@RunWith(SpringRunner.class)
@TestPropertySource(locations = "classpath:application.yml")
public class TestA {

  @Value("${a.b.c}")
  private String abc;

  @InjectMocks
  private A a;

  @Test
  public void testFoo() {
    this.a.foo();
  }
}

当我调试测试方法testfoo()时,我看到变量abc是从application.yml文件中读取的。但是,在foo()方法中,我看到变量abc是null。如何设置变量abc,以便在尝试测试此方法时在方法foo()中可用?

共有1个答案

贾成天
2023-03-14

第一步是回答这个问题:我是单元测试我的类中的代码,还是集成测试Spring和包含我的类的一些代码集合的组合?

如果您正在对代码进行单元测试,那么就没有必要让Spring来完成它的工作。相反,您只需要实例化您的类,设置Spring为您设置的值,执行您正在测试的方法,然后验证您的方法是否正确执行。

下面是按照我的建议重写的单元测试示例:

public class TestA
{
  private static final String VALUE_ABC = "VALUE_ABC";

  private A classToTest;

  @Test
  public void testFoo()
  {
    classToTest.foo();
  }

  @Before
  public void preTestSetup()
  {
    classToTest = new A();

    ReflectionTestUtils.setField(
      classToTest,
      "abc",
      VALUE_ABC)
  }
}
    null
 类似资料:
  • 我无法找出是否可以在pom.xml文件中读取Spring的application.properties中的任何数据。 拜托,有人能帮我吗? 谢谢你。

  • 在我的java代码中,如何访问存储在JMeter测试计划(jmx文件)中的值?特别是尝试获取ThreadGroup。numthreads,这样我的测试代码就可以知道测试中使用了多少线程。 感谢您的回复。以下是我最终使用的代码:

  • 我有以下控制器类 完成后,我需要在一个测试用例中测试这个方法。我的测试课程如下。我有申请表。/src/test/resources文件夹中的属性文件 当我这样做时,应用程序。属性具有details和otherdetails参数,但返回null。 我应该如何使用它们来获取控制器类中的值?

  • 我正在使用Postman的打包应用程序版本来针对我的Rest API编写测试。我正在尝试管理连续测试之间的状态。为了方便起见,向Javascript测试运行时公开的Postman对象有设置变量的方法,但没有用于读取的方法。 现在,我可以在下一次调用中通过{{key}}结构读取这个值,该结构从当前环境中获取值。但是,这在测试中不起作用;它只在建筑材料中起作用。 那么,有没有人可以从测试中读到这些东西

  • 我让Spring Redis使用和所有默认配置工作,比如default等等。 现在,我试图通过在文件中配置它来进行相同的配置。但是我不知道应该如何创建bean,准确地读取我的属性值。 spring.redis.sentinel.master=themaster spring.redis.sentinel.nodes=192.168.188.231:26379 spring.redis.passwo

  • 我使用Mockito测试我使用JUnit的java类。我是Mockito和Junit测试用例的新手。我有一个类,它有spring配置。请看下面的代码片段。 上面的测试用例在行“((JdbcTemplate)JdbcTemplate.getjdbcoperations()).setFetchSize(1000);”处抛出NullPointerException 第二件事是@autowired字段,这