【问题标题】:JMockit NullPointerException on mocked object in Expectations期望中的模拟对象上的 JMockit NullPointerException
【发布时间】:2013-05-01 20:36:26
【问题描述】:

这是我的测试用例的相关部分:

@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()) {
        ...
    }

我在这一行收到 NullPointerException:if (isItemStowableResponse.hasFilterResults())

我对 JMockit 比较陌生。我不确定它为什么要在这个方法中执行代码——我只是想模拟整个方法,因为它是我试图进行单元测试的“enact”方法中的一个依赖项。

【问题讨论】:

  • 你没有在你的 Expectations 块内模拟活动对象;这就是为什么该代码不起作用的原因。我在您的回答中看到您已经转向 JMockit 中的另一种模拟方式......基于状态,而不是基于您的问题中的行为。无论哪种方式都可以完成这项工作。

标签: java unit-testing mocking jmockit


【解决方案1】:
    new MockUp<MoveItemActivity>()
    {
        @Mock
        IsItemStowable isItemStowable(MoveItemRequest request) {
            return new IsItemStowable();
        }
    };

好的,知道如何在被测类中模拟一个方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 2016-08-27
    • 2014-11-14
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多