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

不能用PowerMockito部分模拟静态方法

慕容博涛
2023-03-14
public class Util {
    // Some code
    public static void toBeUnitTested(CustomObject cb, CustomObject1 cb1, List<CustomObject2> rows, boolean delete) {
        // some code

       toBeMockedFunction(cb, "test", "test");
    }

    public static CustomObject toBeMockedFunction(CustomObject cb, String str1) {
        // some code
    }

}
@RunWith(PowerMockRunner.class)
 @PrepareForTest({ Util.class})
 public class UtilTest {
    @Test
    public void Test1() {
        PowerMockito.spy(Util.class);            

 //mock toBeMocked function and make it do nothing 
 PowerMockito.when(PowerMockito.spy(Util.toBeMockedFunction((CustomObject)Mockito.anyObject(), Mockito.anyString()))).thenReturn(null);

        Util.toBeUnitTested(cb, "test", "test");
     }
  }
  PowerMockito.mockStatic(Util.class);  
  PowerMockito.when(Util.toBeUnitTested((CustomObject)Mockito.anyObject(),Mockito.anyString())).thenCallRealMethod();
    Util.toBeUnitTested(cb, "test", "test");

共有1个答案

松英叡
2023-03-14

这是如何做到这一点的一个例子:

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Util.class})
public class UtilTest {
   @Test
   public void Test1() {

      PowerMockito.spy(Util.class);
      PowerMockito.doReturn(null).when(Util.class, "toBeMockedFunction", Mockito.any(CustomObject.class), Mockito.anyString(), Mockito.anyString());

      List<CustomObject2> customObject2List = new ArrayList<>();
      customObject2List.add(new CustomObject2());

      Util.toBeUnitTested(new CustomObject(), new CustomObject1(), customObject2List, true);
   }
}

请注意,您的OP的代码不编译。方法TobeMockedFunction(CustomObject cb,String str1)只接收2个参数,您使用3调用:TobeMockedFunction(cb,“Test”,“Test”);。正如您所看到的,我已经将最后一个添加到方法签名中。

希望能有所帮助

 类似资料:
  • 在尝试模拟InetAddress中的静态方法时,我遇到了奇怪的问题。我成功地能够为许多其他类模拟静态方法,并且一切正常,但InetAddress显示不同的行为。我使用的是JUnit 4. x、Mockito 1.9.5 下面给出了使用Mockito和PowerMock以及InetAddress模拟的测试- 当我将下面给出的方法放入某个实用程序InetAddress中时。getLocalHost()

  • 问题内容: 我正在尝试模拟私有静态方法。见下面的代码 这是我的测试代码 但是我运行的每个瓦片都会出现此异常 我想我在嘲弄东西时做错了什么。有什么想法我该如何解决? 问题答案: 为此,您可以使用和。 此外,您必须在测试类中指定PowerMock运行器,并准备要进行测试的类,如下所示: 希望对您有帮助。

  • 编辑: 感谢所有的回复。我找到了解决办法。我试图模拟一个方法findById,它不是直接在User.class中,而是在用户扩展的genericModel.class中。现在一切都很完美。

  • 当所有参数都在使用匹配器时,为什么我会得到这个异常?如何解决?我调试了它,发现返回null。 当我将注释添加到测试类并运行测试时,junit不会做出响应。为什么? 编辑 我试着不使用论据匹配器,结果

  • 我有一个类需要测试: 和一个测试类: 我必须模拟静态调用,以便它按我的预期返回 我遵循以下步骤: @RunWith(PowerMockRunner.class) @PrepareForTest({ Collections.class, StreamSupport.class, CampaignHandlerFactory.class}) PowerMockito.mockStatic(clazz)

  • 我想从一个包含两个静态方法m1和M2的类中模拟一个静态方法m1。并且我希望方法m1返回一个对象。 我尝试了以下操作 2)但在执行m1时不调用它。