0

我对JMockit的理解是,它将用模拟替换模拟对象的所有实例(除非你另有说明)。

因此,在实例化一个我试图模拟的对象后,我很困惑得到一个NPE 。

测试的目的不是调查导致 NPE 的对象,但我确实需要模拟它以执行测试,因为它执行一些数据库操作来验证某些输入。

我的测试代码是这样的(不是复制意大利面,因为它是工作代码,但应该突出显示问题):

public class ClassToTest{

    public execute(){
       MyDependency myDep = getDependency();

        myDep.doSomething(); //I get a NPE here, implying getDependency returned null 
    }

    protected MyDependency getDependency(){
        return new MyDependency("an Arg", "another Arg");
    }

}

我的测试方法:

@Test
public void testCreateHorseDogMeetingByCodeDataProviderTruncated()
    throws IllegalArgumentException, SQLException,
    IllegalCountryLocationCombo, MEPException {

    // Arrange
    ClassToTest myClass = new ClassToTest();

    new NonStrictExpectations() {

        MyDependency mockDep;

        {
            //Set up my expectations, not related to MyDependency
        }
    };

    // Act
    myClass.execute();

    // Assert
    new Verifications() {
        {
            //some verification stuff
        }
    };
}

谁能帮我解决这个 NPE 问题,以便我完成测试?

4

2 回答 2

1

结果我意外地实例化了 ClassToTest 的子类,它覆盖了 getDependency 的实现并导致出现空值。一定是自动完成的东西。

于 2011-01-21T14:34:46.727 回答
0

MyDependency 是一个接口吗?您可能还需要模拟具体类。

您也可以尝试将 MyDependency mockDep 放在测试函数的参数列表中。然后,您也将拥有验证步骤的模拟对象。

于 2011-01-21T13:21:27.427 回答