我有以下方法......
public void testa(Car car) {
em.persist(car);
car.setEngine(null);
}
在我的测试中我有:
protected 最终汽车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
对象。您有一辆汽车
,您对其设定了期望,还有一辆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/