2013-05-01 96 views
0

这里嘲笑对象上是我的测试用例的相关部分:JMockit的NullPointerException在期望

@NonStrict 
private StowServiceWrapper mockStowServiceWrapper; 

@NonStrict 
private IsItemStowableResponse mockIsItemStowableResponse; 

@NonStrict 
private IsItemStowable mockIsItemStowable; 

... 

@Test 
public void testMoveItemActivitySuccess() { 
    final MoveItemActivity activity = new MoveItemActivity();   

    final MoveItemRequest request = new MoveItemRequest(); 

    new Expectations() { 

     { 
      invoke(activity, "isItemStowable", request); result=mockIsItemStowable; 
      //activity.isItemStowable(request); result=mockIsItemStowable; 
      mockStowServiceWrapper.isItemStowableToBin(anyString, anyString, anyString, anyString); result=mockIsItemStowableResponse; 
      mockIsItemStowableResponse.hasFilterResults();result=false; 
     } 
    }; 

    MoveItemResponse response = activity.enact(request); 

下面是类源的相关部分(在MoveItemActivity):

StowServiceWrapper stowServiceWrapper = new StowServiceWrapperImpl(); 
private IsItemStowable isItemStowable(MoveItemRequest input) { 

    IsItemStowable isStowable = new IsItemStowable(); 
    isStowable.setIsItemStowable(false); 

    System.out.println("TEST1"); 
    /* First check if item is stowable to bin */ 
    IsItemStowableToBinResponse isItemStowableResponse = stowServiceWrapper.isItemStowableToBin(); 
    System.out.println("TEST2"); 
    /* fastFail is 'true' by default, so stow service request will only return one filter violation at a time */ 
    if (isItemStowableResponse.hasFilterResults()) { 
     ... 
    } 

I” m在此行发生NullPointerException:if (isItemStowableResponse.hasFilterResults())

我对JMockit比较陌生。我不知道为什么它会执行这个方法中的代码 - 我只是想嘲笑整个方法,因为它是我试图单元测试的'enact'方法中的一个依赖项。

+0

您不是在嘲笑Expectations块中的活动对象;这就是为什么该代码无法正常工作。我在你的回答中看到,你已经转向了JMockit中的另一种嘲笑方式......基于状态的,而不是基于你的问题的行为。无论哪种方式都可以完成这项工作。 – 2013-05-02 15:15:43

回答

0
new MockUp<MoveItemActivity>() 
    { 
     @Mock 
     IsItemStowable isItemStowable(MoveItemRequest request) { 
      return new IsItemStowable(); 
     } 
    }; 

好吧,想出了如何模拟被测试的类中的方法。