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

标签 java jmock

我有以下方法......

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/

相关文章:

java - JMock 无法模拟私有(private)方法

java - 单元测试私有(private)内部类方法

java - 如何使用 Jmockit 模拟 JdbcTemplate.update?

java - 带有 Gradle 的谷歌云存储 Java 客户端库

java - 将装饰器设计模式用于类的层次结构

java - 如何比较两个由属于同一父类(super class)但不同子类的对象实例组成的数组列表。

java - ParameterizedType.getRawType() 返回 j.l.r.Type,而不是 Class<?>?

java - JMock 通用返回类型

java - 更新到Java 17后无法使用JMock

java - 关于连续减法