【发布时间】:2020-01-28 15:55:25
【问题描述】:
我正在为 Spring 管理的以下类编写单元测试:
@Component
public class MyClass {
@Value("${urlValue}")
private String urlPath;
private MyUrl url = new MyUrl(urlPath);
public class MyUrl {
MyUrl(String url) {
if (url == null) {
throw new NullPointerException();
}
}
}
}
我正在尝试以最简单的方式设置urlValue 以进行测试。我尝试了以下方法:
public class MyClassTest {
private MyClass mc;
@Before
public void setUp() {
mc = new MyClass();
ReflectionTestUtils.setField(mc, "urlPath", "urlValue");
}
@Test
public void test() {
}
}
但是反射设置失败,因为它来得太晚了(new MyUrl() 之前被调用并抛出异常)。什么是设置urlPath 的最简单方法,理想情况下(我假设)不更改代码,也不使用 Spring 上下文进行测试?
【问题讨论】:
-
你可以在
@Before方法中拥有它 -
我不太了解您的答案(也不了解它与您链接的答案有何关系)。我很抱歉不理解。我在我的问题中添加的代码 sn-p 实际上已经在 @Before 方法中,但我看不出这会如何改变任何东西。你能帮我更多吗?
-
你能添加更多代码吗?我还要说不要在方法内部创建像这样的
MyClass mc = new MyClass();对象。请添加更多代码 -
我添加了我认为是我情况的完整示例。如您所见,我已经在@Before 中,但仍然得到 NullPointerException。
-
最简单的方法是使用constructor injection而不是字段注入。然后你可以为你的测试实例化它。
标签: java spring unit-testing junit