gpt4 book ai didi

java - EasyMock 返回 null

转载 作者:行者123 更新时间:2023-11-30 10:27:49 25 4
gpt4 key购买 nike

我目前正在处理一些使用 EasyMock 的测试用例。我的示例代码如下所示:

{
dao = EasyMock.createNiceMock(Dao.class);

initObj();
EasyMock.replay(dao);
// EasyMock.verify(dao);

mapper = new Mapper();
mapper.setDao(dao);
}
@Test
public void testmapper(){
mapper.map();
}

public void initObj() {
Obj o = new Obj();
o.setX(2);
EasyMock.expect(dao.findObj(1)).andReturn(o);
}

class Mapper {
@Autowired
private Dao dao;

public Obj map(){
Obj o = dao.findObj(1);
System.out.println(o.getX());
return o;
}
//getter and setter
}

如果我实际调用 EasyMock.verify(dao);,它会抛出

java.lang.AssertionError: 
Expectation failure on verify:
dao.findObj(1): expected: 1, actual: 0
at org.easymock.internal.MocksControl.verify(MocksControl.java:183)
at org.easymock.EasyMock.verify(EasyMock.java:2142)
...

如果我不调用验证,我在 Obj 上的 Mapper 类中的第一次调用会导致 NPE。我是 EasyMock 的新手,还找不到它不返回我在 initObj 中创建的 Obj 的原因。欢迎任何启发。我阅读了关于该主题的一些问题以及一些简单的教程,但它们对我没有帮助

最佳答案

verify 应该在您的测试之后。所以在 mapper.map() 之后。它用于验证是否进行了所有预期的调用。所以它出现在最后是有道理的。

那么,用你提供的代码是绝对不可能得到NPE的。除非你对 getX 和 setX 有问题。这是我的代码版本。效果很好。

public class MyTest {

private final Dao dao;
private final Mapper mapper;

{
dao = EasyMock.createNiceMock(Dao.class);

initObj();
EasyMock.replay(dao);
// EasyMock.verify(dao);

mapper = new Mapper();
mapper.setDao(dao);
}

@Test
public void testmapper(){
mapper.map();
EasyMock.verify(dao);
}

public void initObj() {
Obj o = new Obj();
o.setX(2);
EasyMock.expect(dao.findObj(1)).andReturn(o);
}

class Mapper {
private Dao dao;

public Obj map(){
Obj o = dao.findObj(1);
System.out.println(o.getX());
return o;
}

public void setDao(Dao dao) {
this.dao = dao;
}
}

class Obj {
private int x;

public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}
}

interface Dao {
Obj findObj(int i);
}
}

关于java - EasyMock 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45079720/

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