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 必须为空。有点意外,但确实不可避免。

于 2011-07-31T16:47:16.457 回答