Как выполнить модульное тестирование логического поля с помощью @Resource - PullRequest
0 голосов
/ 16 мая 2018

Я хочу протестировать некоторый класс. У этого класса есть логическое поле с @ 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". Но оно дает ошибку.

org.mockito.exceptions.base.MockitoException: Не может издеваться / шпионить класс java.lang.Boolean Мокито не может издеваться над шпионом: - выпускные занятия - анонимные занятия - примитивные типы

Это мой тестовый класс

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. Можно изменить только тестовый класс.

1 Ответ

0 голосов
/ 16 мая 2018

Я исправил проблему с помощью org.springframework.test.util.ReflectionTestUtils

Я удалил @Mock(name = "readOnlyMode") private Boolean readOnlyMode; и использовал ReflectionTestUtils.setField(refreshHandlerImpl,RefreshHandlerImpl.class,"readOnlyMode",true,Boolean.class); в моем методе @BeforeMethod. Это мой тестовый класс,

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();
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...