当前位置: 首页 > 知识库问答 >
问题:

PowerMock忽略我从方法返回的

夏和雅
2023-03-14
  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个答案

喻嘉泽
2023-03-14

我能够重现您的问题,并且当我使用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中检测到的未完成的残茬中有一个关于这个问题的详细描述,但我无法将其映射到这个案例中。

 类似资料:
  • 我目前正在学习Spring boot,我一直在测试一个项目——非常感谢任何帮助,因为我是这里的初学者。 我有一个rest控制器测试,使用Mockito,当使用Mockito.when()调用方法时,该测试似乎忽略了Then返回。 这是整个班级: 名为“testCreateUser”的测试没有问题地通过了。给我一个问题的是名为“testFindUserById”的测试。 以下是我尝试测试的控制器方法

  • 所以基本上,我创建了一个小函数,从WordPress获取某个类别的最新帖子,并将它们链接到一个测试页面中。函数本身工作,从这个stackexchange线程抓取它。我的while循环设置当前忽略了我尝试返回的所有HTML/CSS。 删除_post()会忽略$args并列出所有类别中的所有帖子,而不只是我列出的那个,但仍然会忽略HTML。 删除wp_reset_postdata()并没有像我所看到的

  • 有没有一种方法可以忽略使用mapstruct在此代码示例中第三种方法的映射器的生成?

  • 我有一个项目,其中我创建了一个BankAccount超级类和一个SavingsAccount子类。一切都很好,但我在返回我特别想要的字符串时遇到了麻烦。 示例:(裁剪) 驱动程序类将对BankAccount使用toString方法,并打印以下内容: (这对于这个超类来说是完美的) 但是,下面是SavingsAccount子类 调用SavingsAccount的toString方法时,它会打印: S

  • 我有这门课(简体) 我试图模拟writeToFile方法,但没有成功 这个结果随着去到原来的方法,我也尝试了模拟具体的方法使用: 编辑:修复导入问题后,正如@pvpkiran所说,现在起作用了!我可以用DoAnswer来验证。

  • 我在中有以下方法: 而是: