2

次のコードがあるとしましょう:
モック オブジェクト クラス

public class SomeClass {
    private Foo someField;
    public SomeClass {
        someField = new Foo();
    }
    public Foo getSomeField { return someField; }
    public void getSomething() {}
    public boolean doSomething(Object object) {}
}

次にテストスイートがあります

public class TestSuite {
    private ClassToTest classToTest;
    private SomeClass mock;

    @Before
    public void setUp() {
        classToTest = new ClassToTest();
        mock = EasyMock.createMock(SomeClass.class);
    }

    @Test
    public void testMethod() throws Exception { 
        mock.getSomething();
        EasyMock.replay(mock);

        classToTest.methodToTest(mock); //Where methodToTest accepts SomeClass and int

        EasyMock.verify(mock);
    }
}

そしてテストされている方法

public void methodToTest(SomeClass a) {
    //Logic here
    Foo b = a.getSomeField();
    b.do(); // <--- null pointer exception here because someField isn't initialized
    a.getSomething(); // <--- thing I want to test if it is being called, but can't due to exception prior to this line
    //Logic after
}

私は立ち往生しています..だから、基本的に SomeClass は私が望んでいたように初期化されていません。回避策はありますか?それとも、そのようなことができる他のフレームワークはありますか?

4

1 に答える 1

2

あなたのmethodToTest呼び出しa.getSomeField()ですが、テストのセットアップ部分はその呼び出しを想定していません。次のようなものが必要です。

Foo foo = new Foo();
EasyMock.expect(mock.getSomeField()).andReturn(foo);

または呼び出しをスタブするには:

Foo foo = new Foo();
EasyMock.expect(mock.getSomeField()).andStubReturn(foo);

( への電話の前mock.getSomething())。

との違いについては、この質問を参照してください。andReturnandStubReturn

于 2013-02-06T19:35:33.423 に答える