【发布时间】:2017-03-21 09:48:04
【问题描述】:
我有一堂课:
@Service
public class MyService{
@Value("${some.value}")
private String someValue;
private String someMethod(String inputString){
return inputString == null || inputString.isEmpty() ? someValue : inputString;
}
}
在属性文件中 some.value 定义如下:
some.value=SomeValue
然后我尝试使用 ReflectionTestUtils 测试 someMethod:
public class MyTest{
@Value("${some.value}")
private String someValue;
@Autowired
private MyService myService;
@Test
public void testSomeMethod() {
Assert.assertEquals(someValue, ReflectionTestUtils.invokeMethod(myService, "someMethod", ""));
}
}
我收到以下错误:
java.lang.AssertionError:预期:SomeValue 实际:null
调试时,我看到我正在测试的服务内部 - 配置值为空。
更奇怪的是(对我来说 :))如果我将 someMethod 从 private 更改为 public,一切正常。
【问题讨论】:
-
让我猜这不是您正在测试的实际代码,而是一个简化版本,在您的实际应用程序中,您的代码需要/需要 AOP,如事务、安全等。
-
是简化版。由于项目中还有很多其他的东西,我认为不相关,有什么具体的你需要知道的吗?
-
是的,无论你是否使用 AOP(尽管我怀疑我已经知道答案)。我怀疑您在此处发布的示例(没有 AOP)可以正常工作,但是一旦您在混合中添加 AOP,它(似乎)就不起作用。
标签: java spring unit-testing