PowerMock игнорирует мое возвращение из метода - PullRequest
0 голосов
/ 04 мая 2018

Я вызываю этот метод, который возвращает пустой список ..

  public static List<String> getAttribute(@Nullable Subject subject, String key) {

      return Collections.emptyList();
    }

Не обращайте внимания на простоту этого метода.

У меня есть метод испытания:

  @Test
  public void testGetRequesterGroupsOnSubject() {
      List<String> testData = new ArrayList<>();
      testData.add("admin");
    mockStatic(SecurityUtils.class);
    mock(SubjectUtils.class);
    doReturn(principalCollection).when(currentSubject).getPrincipals();
    doReturn(testData).when(SubjectUtils.getAttribute(currentSubject, SubjectUtils.ROLE_CLAIM_URI));
    assertEquals(sfa.getRequesterGroups(), new ArrayList<>());
  }

SubjectUtils - класс с вышеуказанным методом. Однако, несмотря на то, что getAttribute возвращает пустой список, разве я не должен ожидать, что это перенастроит мой список строк? (Testdata)

Текущая ошибка:

org.mockito.exceptions.misusing.UnfinishedStubbingException: 
Unfinished stubbing detected here:
-> at 

E.g. thenReturn() may be missing.
Examples of correct stubbing:
    when(mock.isOk()).thenReturn(true);
    when(mock.isOk()).thenThrow(exception);
    doThrow(exception).when(mock).someVoidMethod();
Hints:
 1. missing thenReturn()
 2. you are trying to stub a final method, you naughty developer!
 3: you are stubbing the behaviour of another mock inside before 'thenReturn' instruction if completed

1 Ответ

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

Мне удалось воспроизвести вашу проблему, и когда я использую when (). ThenReturn () вместо DoReturn (). When (), тест был успешно выполнен.

@RunWith(PowerMockRunner.class)
@PrepareForTest( SubjectUtils.class )
public class SubjectTest
{
  @Test
  public void testGetRequesterGroupsOnSubject() {
      List<String> testData = new ArrayList<>();
      testData.add("admin");  
      Subject subject = new Subject();      
      PowerMockito.mockStatic(SubjectUtils.class);
      PowerMockito.when(SubjectUtils.getAttribute(subject, "")).thenReturn(testData);
      //PowerMockito.doReturn(testData).when(SubjectUtils.getAttribute(subject, ""));
      assertEquals(SubjectUtils.getAttribute(subject, ""), testData);
  }
}

Я не мог понять причину такого поведения. Когда я ищу, кажется, нет разницы в обоих подходах для макетов объектов.

Подробное описание этой проблемы содержится в Обнаружена незаконченная заглушка в Mockito Но я не мог сопоставить это с этим делом.

...