【问题标题】:PowerMock ignoring my return from methodPowerMock 忽略我从方法返回
【发布时间】:2018-05-04 08:47:21
【问题描述】:

我正在调用这个返回空列表的方法..

  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 返回一个空列表,我不应该期望这会返回我的字符串列表吗? (测试数据)

当前错误:

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

【问题讨论】:

    标签: java mockito powermock powermockito


    【解决方案1】:

    我能够重现您的问题,当我使用 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);
      }
    }
    

    我无法弄清楚这种行为的原因。当我搜索时,模拟对象的两种方法似乎没有区别。

    Unfinished Stubbing Detected in Mockito中有关于这个问题的详细描述 但我无法将其映射到这个案例。

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 2017-08-07
      • 1970-01-01
      • 2021-01-13
      相关资源
      最近更新 更多