【问题标题】:How do I mock an object of a class with parameterized constructor?如何使用参数化构造函数模拟类的对象?
【发布时间】:2015-10-29 14:43:39
【问题描述】:

代码

public class A{
    public A (B b, C c){
    //do something here
    }
}

为了测试,我想创建一个模拟对象。我现在做的是

B bmock = mock(B);
C cmock = mock(C);
A aobject = new A(bmock, cmock);

但是,这不允许我在对象上调用 verify(),因为它没有被模拟。该怎么做?

【问题讨论】:

  • 如果A 是您正在测试的对象,为什么还要在A 上调用verify
  • 这是有道理的。但我打算验证一个对象是否正在调用其他函数。我在做 verify(aobject, times(1)).somefunction();
  • 不要为此使用模拟。使您的方法更改或返回某些状态并使用断言进行验证。
  • 如果你需要验证类 A 调用了一个方法,这个方法应该在依赖项之一(即类 B 或 C)上。您不应该让测试可见 - 测试行为,而不是实现。

标签: java unit-testing mocking mockito powermockito


【解决方案1】:

你可以使用Spy:

A aobject = spy(new A(bmock, cmock));

所以你实际上是在调用A 的实现,但仍然可以验证交互。

查看文档了解详情: http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#spy(T)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多