Mockito 可以使用参数构造函数初始化模拟对象吗?
Can JMockit initiate mock objects with argument constructor?
当我把@Mocked 注解放在一个只有带参数的构造函数的对象上时,这个对象会被正确启动吗?
When I put the @Mocked annotation on a object which has only constructor with parameters, will this object be initiated rightly?
没有。
将创建一个具有相同接口的mock。这意味着它将具有相同的 public
方法,如果测试 class 在同一个包中,它也将具有相同的 protected
和 package private
可访问方法。
这个模拟将不会调用模拟class的真实方法(除非你这样配置)。
这意味着对于每个预期由您的 测试中的代码调用的方法 (剪切)并且定义了 return 值,您必须配置你的模拟,所以这是 returns 一个值,你的切割应该在那个特定的测试中使用。
这种可配置的 return 值和模拟的 验证 功能是我们使用模拟框架的原因。
关注
如果你想模拟对访问由模拟的classes构造函数初始化的成员的方法的调用,你必须使用表单
doReturn(SOME_VALUE).when(mock).methodToBeCalledByYourCut();
因为表格
when(mock.methodToBeCalledByYourCut()).thenReturn(SOME_VALUE);
在这种特殊情况下会引发 NullPointerException
。
当我把@Mocked 注解放在一个只有带参数的构造函数的对象上时,这个对象会被正确启动吗?
When I put the @Mocked annotation on a object which has only constructor with parameters, will this object be initiated rightly?
没有。
将创建一个具有相同接口的mock。这意味着它将具有相同的 public
方法,如果测试 class 在同一个包中,它也将具有相同的 protected
和 package private
可访问方法。
这个模拟将不会调用模拟class的真实方法(除非你这样配置)。
这意味着对于每个预期由您的 测试中的代码调用的方法 (剪切)并且定义了 return 值,您必须配置你的模拟,所以这是 returns 一个值,你的切割应该在那个特定的测试中使用。
这种可配置的 return 值和模拟的 验证 功能是我们使用模拟框架的原因。
关注
如果你想模拟对访问由模拟的classes构造函数初始化的成员的方法的调用,你必须使用表单
doReturn(SOME_VALUE).when(mock).methodToBeCalledByYourCut();
因为表格
when(mock.methodToBeCalledByYourCut()).thenReturn(SOME_VALUE);
在这种特殊情况下会引发 NullPointerException
。