我上课:
@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
为空。
尝试测试此方法时,如何设置变量abc
使其在方法foo()
中可用?
答案 0 :(得分:1)
第一步是要回答这个问题:我是在对类中的代码进行单元测试还是对Spring和包含我的类的代码集合的组合进行集成测试?
如果您正在对代码进行单元测试, 那么就没有必要让Spring做它的事情。 代替, 您只需要实例化您的课程, 设置Spring将为您设置的值, 执行您正在测试的方法, 然后验证您的方法是否正确执行。
这是按照我的建议重写的示例单元测试:
ReflectionTestUtils
一些注意事项:
@InjectMocks
是春季测试的一部分。sout
,因为您无需注入任何模拟内容。@RunWith
是什么,因此我从测试中排除了它。您应该验证以正确的值(在本例中为VALUE_ABC)调用了sout方法。latitude = input("Latitude: ")
longitude = input("Longitude: ")
height = input("Height: ")
br.open("https://usa.wavedb.com/channelsearch/tvws")
br.select_form ("latitude")
br['latitude'] = latitude # query
br.select_form ("longitude")
br['longitude'] = longitude
br.select_form ("heightAgl")
br['heightAgl'] = height
response = br.submit()
print(response.read())
批注。答案 1 :(得分:0)
您可以尝试覆盖这样的属性:
@TestPropertySource(locations = "location.properties",
properties = "a.b.c=123")
示例取自here