我想测试一些类。这个类有@ Resource的布尔字段。我不能模拟这个字段。因此它给测试失败了一些错误。如果有人能告诉我如何测试这个类。
这是我的java类
public class RefreshHandlerImpl implements RefreshHandler
{
@Resource(name = "readOnlyMode")
private Boolean readOnlyMode;
@Override
public ContactBedRefreshResult refreshContactsAndBeds(final Unit unit, final boolean hasWritableTransaction)
throws RequiresWritableTransactionException
{
if (!isReadOnlyMode())
{
//some code here
}
}
private boolean isReadOnlyMode()
{
return readOnlyMode;
}
}
我尝试模拟" readOnlyMode" field.But它给出错误。
org.mockito.exceptions.base.MockitoException: 不能mock / spy类java.lang.Boolean Mockito不能嘲笑/间谍: - 最后的课程 - 匿名课程 - 原始类型
这是我的测试类
public class RefreshHandlerImplTest
{
@Mock(name = "readOnlyMode")
private Boolean readOnlyMode;
@InjectMocks
private RefreshHandlerImpl refreshHandlerImpl;
@BeforeMethod
public void setUp() throws Exception {
initMocks(this);
}
@Test
public void testRefreshContactsAndBeds_ReturnsZeroContactsWhenCollaboratorsDoes()
throws Exception
{
ContactBedRefreshResult result = refreshHandlerImpl.refreshContactsAndBeds(unit, true);
assertThat(result.getContacts()).isEmpty();
}
}
我可以使用反射,然后使用它吗?我无法更改我的java类。只能更改测试类。
答案 0 :(得分:2)
我使用org.springframework.test.util.ReflectionTestUtils修复了这个问题
我删除了@Mock(name = "readOnlyMode")
private Boolean readOnlyMode;
并在我的@BeforeMethod方法中使用ReflectionTestUtils.setField(refreshHandlerImpl,RefreshHandlerImpl.class,"readOnlyMode",true,Boolean.class);
。这是我的测试类,
public class RefreshHandlerImplTest
{
@InjectMocks
private RefreshHandlerImpl refreshHandlerImpl;
@BeforeMethod
public void setUp() throws Exception {
initMocks(this);
ReflectionTestUtils.setField(refreshHandlerImpl,RefreshHandlerImpl.class,"readOnlyMode",true,Boolean.class);
}
@Test
public void testRefreshContactsAndBeds_ReturnsZeroContactsWhenCollaboratorsDoes() throws Exception
{
ContactBedRefreshResult result =
refreshHandlerImpl.refreshContactsAndBeds(unit, true);
assertThat(result.getContacts()).isEmpty();
}
}