gpt4 book ai didi

java - 如何使用@Resource 对 boolean 字段进行单元测试

转载 作者:行者123 更新时间:2023-11-29 04:19:14 25 4
gpt4 key购买 nike

我想测试一些类。那个类有带@Resource 的 boolean 字段。我不能模拟这个字段。因此它给出测试失败并出现一些错误。如果有人能告诉我如何测试这个类。

这是我的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”字段。但它给出了错误。

org.mockito.exceptions.base.MockitoException: Cannot mock/spy class java.lang.Boolean Mockito cannot mock/spy following: - final classes - anonymous classes - primitive types

这是我的testng测试类

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类。只能更改测试类。

最佳答案

我使用 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();
}
}

关于java - 如何使用@Resource 对 boolean 字段进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50361736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com