我已经重新考虑了一个课程,我目前正在尝试更新单元测试以反映这一点。该类的一个附加功能是静态字段,如下所示:
private static JdbcTempate jdbcTemple = DbConfiguration.getJdbcTemplate();
在添加此字段后运行单元测试时,我得到空指针错误。我通过使用powermock使用createMock()
和WhiteBox.setInternalState()
方法模拟字段来解决这个问题,这很容易。
然而,其中一套测试使用JMockit而不是powermock和mockito。有人能告诉我如何使用JMockit模拟这个字段吗?
答案 0 :(得分:3)
可以使用JMockit轻松编写测试:
@Test
public void setStaticField(@Mocked JdbcTemplate mockTemplate)
{
Deencapsulation.setField(ClassUnderTest.class, mockTemplate);
assertSame(mockTemplate, ClassUnderTest.getJdbcTemplate());
}
mockit.Deencapsulation
类相当于WhiteBox
,包括设置静态最终字段的功能。
答案 1 :(得分:1)
不确定这是否是您想要的,但您可以模拟DbConfiguration并训练它以返回方法getJdbcTemplate所需的值:
在你的TestClass中添加:
@Mocked
private DbConfiguration dbConfiguration;
在testMethod中添加:
new NonStrictExpectations() {{
DbConfiguration.getJdbcTemplate();
result = new JdbcTemplate( "mock" ); // or return what ever you want your private field to contain...
}};
当实例化拥有此私有静态字段的ClassUnderTest时,该字段的值不会超过" result = ..."。