Mockito JUnit测试:检查构造函数中的方法调用



我有一个类Foo,它包含私有和公共或受保护的方法。例如:

public class Foo{
private int number;
public Foo(){
setup();
doSthing();
}
private void doSthing(){
number=10;
}
public void setup(){
}
protected int getNumber(){
return number;
}
public void run(){
getNumber();
//Do blah blah...
}    
}

我正在尝试使用Mockito测试这个类。

public class FooTest
{
public void testMethods()
{
Foo foo = PowerMockito.mock (Foo.class);
//1 What should I do to see that setup() and doSthing()
//has been called on Foo construction
mock.run();
//2 What should I do to see that getNumber()
//has been called on run() method call
}
}

如果可能的话,我也希望包括"时间(1)"。我很感激你的帮助。

您弄错了:

首先:请不要使用任何PowerMock。。。框架。它们依赖于字节码操作;这迟早会带来麻烦。相信我,我花了很多时间寻找非常奇怪的错误,没有充分的理由。

那么:不要用这种方式测试代码!

您使用mocking框架来创建/控制那些传递到"测试中的类"的对象。您不会使用该框架直接测试您的"测试中的类"!

您也不希望编写了解private方法的测试代码——这些都是实现细节。

取而代之的是:

a) 如上所述,您可以使用mocking将对象传递到测试中的类中。然后你可以控制/验证那些mock,看到你期望你的"测试中的类"进行的调用

b) 您创建"测试中的类"的对象。。。然后对这些对象的属性进行"断言";或方法调用return的结果。

准确地说:一个被嘲笑的物体。。。对"原始"类中的代码一无所知。这是一个模拟!你不能把它用于你的问题暗示你想做的那种测试。要么你在你的真实类上调用方法;或者你为mock指定了一些东西。但是创建一个mock,然后将其与具体的类实现"关联"。。。根本不可能。

最后:如果你认为你的具体类实际上"太大了",不能以正常的测试方式创建。。。那么可能的情况是:你的类对于其他任何东西来说都太大了。班级应该小;并且它们的设计应当遵循SOLID原则。

长话短说:不要试图强迫不可测试的代码进入"测试",通过使用PowerMock。。。您最好投入更多的时间来提高生产代码的质量;这将带来更高的"投资回报率"。

相关内容

  • 没有找到相关文章

最新更新