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

Java Jmock意外的方法调用,看不出原因,java,jmock,Java,Jmock,我有以下方法 public void testa(Car car) { em.persist(car); car.setEngine(null); } 在我的测试中,我有: 受保护的最终Car mockCar=context.mock(Car.class) 我运行这个,我不断得到: 意外调用car.setEngine(null) 如果我在代码中删除设置引擎的代码,并且从测试中删除,则测试通过。。。我完全搞不懂为什么会这样 例外情况: java.lang.AssertionErro

我有以下方法

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

}
在我的测试中,我有:

受保护的最终Car mockCar=context.mock(Car.class)

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

意外调用car.setEngine(null)

如果我在代码中删除设置引擎的代码,并且从测试中删除,则测试通过。。。我完全搞不懂为什么会这样

例外情况:

java.lang.AssertionError:意外调用:car.setEngine(null) 未指定期望值:您是否。。。 -忘记用基数子句开始期望?
-调用模拟方法来指定期望值的参数?

您的问题似乎是您有两个
Car
对象。您有一辆
汽车
,可以设置期望值,还有一辆
模拟汽车
,可以通过。如果看不到这些对象的定义,我无法确定,但这可能是问题的根源

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

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

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);
    }
}

这段代码甚至可以编译吗?您不会关闭
期望
实现或调用
检查
。此外,对
testa
的调用传递一个
Car
对象,但
testa
不接受任何参数。你能把代码缩小到一个特定的失败案例,然后发布文件的全部内容吗。。。。我是手工写的,因为我的代码中有很多注释…谢谢这对我有所帮助。。。。我想我遇到的问题是由于应用了generica。。。因此,我现在创建了一个实例并检查该实例,而不是模拟汽车,这是有意义的。我当时没有考虑过,但是你的车不是合作者,为什么不实例化一个呢?很高兴我帮了忙。
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);
    }
}