gpt4 book ai didi

java - Jmock 意外的方法调用,看不出原因

转载 作者:行者123 更新时间:2023-11-30 09:26:02 25 4
gpt4 key购买 nike

我有以下方法....

public void testa(Car car) {
em.persist(car);
car.setEngine(null);

}

在我的测试中我有:

protected final Car mockCar = context.mock(Car.class);

@Test
public void testCar() {
context.checking(new Expectations() {
{
oneOf(em).persist(car);
oneOf(car).setEngine(null);

}
});
this.stacker.testa(mockCar);
context.assertIsSatisfied();

}

我运行这个,我不断得到:

意外调用 car.setEngine(null)...

如果我在代码中删除了设置引擎的代码,并且测试通过了测试...我完全不明白为什么会这样...

异常(exception):

java.lang.AssertionError: 意外调用: car.setEngine(null)没有指定期望:你... - 忘记以基数条款开始期望? - 调用模拟方法来指定期望参数?

最佳答案

您的问题似乎是您有两个 Car 对象。你有一辆 car,你设定了期望,还有一辆 mockCar,你通过了。没有看到这些对象的定义,我不能肯定地说,但这可能是你问题的根源。

如果这不是问题,我们将需要更多代码。最好是整个文件。

作为引用,这可以很好地编译并通过测试:

import org.jmock.Expectations;
import org.jmock.Mockery;
import org.junit.Test;

public class TestyMcTestTest {
private final Mockery context = new Mockery();

private final EntityManager em = context.mock(EntityManager.class);
private final Stacker stacker = new Stacker(em);
private final Car mockCar = context.mock(Car.class);

@Test
public void testCar() {
context.checking(new Expectations() {{
oneOf(em).persist(mockCar);
oneOf(mockCar).setEngine(null);
}});
this.stacker.testa(mockCar);
context.assertIsSatisfied();
}

public interface Car {
void setEngine(Engine engine);
}

public interface Engine { }

public class Stacker {
private final EntityManager em;

public Stacker(EntityManager em) {
this.em = em;
}

public void testa(Car car) {
em.persist(car);
car.setEngine(null);
}
}

private interface EntityManager {
void persist(Object o);
}
}

关于java - Jmock 意外的方法调用,看不出原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15071465/

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