gpt4 book ai didi

java - 模拟接口(interface)为空

转载 作者:行者123 更新时间:2023-12-02 08:13:30 26 4
gpt4 key购买 nike

我正在尝试使用 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 block 中使用 dao 对象时,会抛出 NPE。我尝试将 dao 的声明移动到用 @Mocked 注释的成员变量,但发生了同样的事情。我也尝试过使用 MyDao 的具体实现,并且发生了同样的事情。

最佳答案

不是 dao 为 null,而是 any。从 Integer (强制转换之后)到 int 的拆箱涉及取消引用,这会引发 NullPointerException。尝试使用 anyInt 代替。

我认为 jMockit 文档没有讨论 Expectations.any 的实际值。是,但请注意,它可以成功转换为任何其他类型(您可以说 (String)any(Integer)any)。 Java 中所有强制转换始终成功的唯一值是 null。因此,Expectations.any 必须为 null。有点意外,但确实是不可避免的。

关于java - 模拟接口(interface)为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com