有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我们可以使用powermock模拟第二个对象的创建吗

我们可以使用下面的代码行使用powermock模拟对象创建:

MyClass myObj = getMyObj();

PowerMockito.whenNew(MyClass.class).withAnyArguments().thenReturn(myObj);

现在在我编写测试用例的课堂上,我有这样的逻辑:

public class TestClass {

   public void testMethod() {
      MyClass obj = new MyClass();
      boolean flag = doSomeOperation();
      if(flag) {
        MyClass obj1 = new MyClass();
        //doSomeOtherOp();       
      }
   }
}

这里我想模拟第二个对象创建obj1,是否可以使用powermock来控制要模拟的对象。这里我不想模拟第一个对象obj


共 (1) 个答案

  1. # 1 楼答案

    我认为这很简单:

    PowerMockito.whenNew(MyClass.class).withAnyArguments().thenReturn(firstResult)
      .thenReturn(anotherResult);
    

    但不幸的是,虽然链接在其他上下文中是可能的,但PowerMockito似乎不允许这样做

    (大概是

    when(someMock.toString()).thenReturn("a").thenReturn("b");
    System.out.println(someMock.toString() +factory.toString();
    

    只是很好地打印ab!)

    所以我现在能给出的唯一答案是:你写了很难测试的代码。考虑不要那样做。

    与其依赖于对new()的PowerMock-to-mock调用,不如后退一步,改变设计。例如,在生产代码中使用工厂。因此,与其直接调用new(),不如直接向工厂请求新实例。而且,无需PowerMock(ito)即可轻松模拟该工厂