我正在尝试用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的具体实现,同样的事情发生了。
答案 0 :(得分:2)
dao
不是any
,而是anyInt
。从Integer(在您的强制转换之后)到int的拆箱涉及取消引用,它会抛出NullPointerException。请尝试使用(String)any
。
我认为jMockit文档没有说明Expectations.any的实际值是什么,但请注意,它可以成功地转换为任何其他类型(您可以说(Integer)any
和{{1 }})。所有强制转换始终成功的Java中唯一的值是null
。所以,Expectations.any必须为null。有点意外,但不可避免。