0

JMockitでDAOをモックしようとしています:

public interface MyDao {
    Details getDetailsById(int id);
}

このテストクラスでは:

public class TestClass {

    @Test
    public void testStuff(final MyDao dao) throws Exception
    {
        new Expectations()
        {
            {
                // when we try to get the message details, return our sample
                // details
                dao.getDetailsById((Integer) any);  ***THROWS AN NPE
                result = sampleDetails;
            }
        };

        ClassUsingDao daoUser = new ClassUsingDao(dao);
        // calls dao.getDetailsById()
        daoUser.doStuff();
}

Expectations ブロックで dao オブジェクトが使用されると、NPE がスローされます。dao の宣言を @Mocked アノテーションが付けられたメンバー変数に移動しようとしましたが、同じことが起こります。また、MyDao の具体的な実装を使用してみましたが、同じことが起こります。

4

1 に答える 1

2

それはdaonullではありませんが、any. (キャスト後の) Integer から int へのボックス化解除には、NullPointerException をスローする逆参照が含まれます。anyInt代わりに使用してみてください。

jMockit のドキュメントがExpectations.anyの実際の値について述べているとは思いませんが、他の型に正常にキャストできることに注意してください ( (String)anyand と言うことができます(Integer)any)。すべてのキャストが常に成功する Java の唯一の値は ですnull。したがって、Expectations.any は null でなければなりません。少し驚きですが、本当に避けられません。

于 2011-07-31T16:47:16.457 に答える