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

PowerMock当New不返回模拟对象时

谭嘉容
2023-03-14

尽管遵循了多种不同的资源,但我无法让PowerMock在新的时间工作。以下是我的示例:

public class MyClass {
  public void foo() {
    Point p = new Point(2, 3);
    System.out.println(p);
  }
}

我试图模拟构造函数,使其指向这样的点:

@RunWith(PowerMockRunner.class)
@PrepareForTest({MyClass.class})
public class MyClassTest {
  public void testFoo() {
    MyClass c = new MyClass();
    PowerMockito.whenNew(Point.class).withAnyArguments().thenReturn(new Point(0, 0));
    c.foo() // Still (2, 3) is printed instead of the mocked (0, 0)
  }
}

我做错什么了吗?我应该提到,我正在gradle项目中使用PowerMock。这似乎与https://automationrhapsody.com/mock-new-object-creation-powermock/,所以我不知道为什么它对我不起作用。

共有1个答案

龚铭
2023-03-14
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyClass.class})
public class MyClassTest {
    @Test
    public void testFoo() throws Exception {
        //Arrange
        MyClass c = new MyClass();
        Point point = new Point(0,0);
        PowerMockito.whenNew(Point.class).withAnyArguments().thenReturn(point);

        //Act
        c.foo();

        //Assert
        PowerMockito.verifyNew(Point.class).withArguments(anyInt(), anyInt());
    }
}

通常我会返回一个模拟对象。将Point point=new Point(0,0)替换为Point point=PowerMockito.mock(Point.class)

 类似资料:
  • 调试时,在带有的行中弹出一个NullPointerException,类为。

  • 我有以下代码来创建一个从画布到数据URL的Blob dataURItoBlob=(dataURI)- 这在chrome/ff/opera中运行良好。但当我在IPAD os 6.1中尝试时,新的Blob返回[object Uint8Array]在IOS 6.1中有问题吗 谢啦

  • 如何模拟返回已强制转换的模拟对象的方法。 试验方法。

  • 我正在尝试用Java对一个类进行单元测试。 这个类依赖于另一个类。 类的代码: 在测试类时,我希望将的实例化存根。这是一个我想模拟的依赖项,我不希望它的构造函数被调用。 我的理解是,这将模拟或存根Collaborator,它的构造函数不应该被调用。但是,当我运行测试时,我注意到Collaborator的原始构造函数被调用。 试运行输出: 我对Java和Java中的单元测试非常陌生,所以如果我在这里

  • 它的实现DAO类类似于下面的一个。 我搜索了PowerMock/EasyMock文档,但我猜大多数API方法都提供了对象,这些对象为我提供了DAO接口的虚拟实现类。 > 是否有某种方法可以创建连接的模拟对象(假设我没有物理数据库访问权限),并可以运行类中提供的后续代码,因为我必须使用这种模拟来实现代码覆盖率?

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