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

时间:2016-06-06 13:40:19

标签: java junit mockito powermockito

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

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
   }
}

我正在尝试使用Mockito来测试这个课程。

{{1}}

我也希望尽可能包括“次(1)”。我很感激你的帮助。

1 个答案:

答案 0 :(得分:2)

你错了:

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

然后:不要这样测试你的代码!

您使用模拟框架来创建/控制传递的对象到您正在测试的"类#34;。您没有使用该框架来直接测试您正在测试的课程#34;!

您也不想编写知道私有方法的测试代码 - 这些是实现细节。

你做了什么:

a)如上所述,您可以使用模拟将对象传递到您正在测试的类中。然后你可以控制/验证那些模拟看到你期望你正在测试的课程#34;制作

b)你创建了你所测试的"类的对象" ......然后"断言"关于那些对象的属性;或者在方法调用返回的结果上。

准确地说:一个嘲弄的对象...不知道任何关于"原始"中的代码类。这是模拟!您不能将它用于您的问题意味着您想要进行的那种测试。你可以在真正的班级上调用方法;或者你为模拟指定一些东西。但是要创建一个模拟然后"关联"它到具体的类实现......根本不可能。

最后:如果你认为你的具体课程实际上太大而且#34;只是被创造出正常的测试方式...然后机会是:你的班级只是太大其他任何东西。课程应该很小;他们的设计应遵循SOLID原则。

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