使用Mockito,如果我使用@InjectMocks将一个对象注入到我的模拟中,如何避免将其他对象置零?

时间:2013-02-17 06:04:56

标签: java unit-testing mockito

public class TargetObjectWrapper extends TargetObject {
   @Mock SomeObject myMockOfSomeObject;
   @InjectMocks TargetObject targetObject;

   public TargetObjectWrapper(){
       this.targetObject = mock(originalObject);

       //doAnswer(...).when(...) methods
   } 

   //Override other methods of TargetObject
 }

我正在尝试将特定的模拟对象注入targetObject的一个字段中。我知道targetObject将始终有一个具有此特定签名的字段。

一切正常,我可以成功注入myMockOfSomeObject,并适当地重定向呼叫。

但是当TargetObject类包含下面这个简单示例的其他字段时,当我将请求传递给原始对象时,该字段会被取消并导致空指针异常。

Log log = LogFactory.getLog(getClass());

如何避免导致其他对象获取空值?特别是如果其他变量可能在不同对象之间发生变化(这段代码应该是通用的)?

2 个答案:

答案 0 :(得分:1)

在这种情况下,spy(..)而不是mock(...)似乎是正确的方法。虽然我还没有测试它注入了我的模拟对象,但我相信它确实存在。

答案 1 :(得分:0)

@RunWith(MockitoJUnitRunner.class)注释添加到测试类中。