2

私は次の方法を持っています....

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)...

コードにエンジンを設定するコードを削除し、テストからテストに合格すると...なぜこれが起こっているのか完全に混乱しています...

例外:

java.lang.AssertionError: 予期しない呼び出し: car.setEngine(null) 期待値が指定されていません: あなたは... - カーディナリティ句で期待値を開始するのを忘れましたか? - モック化されたメソッドを呼び出して、期待値のパラメーターを指定しますか?

4

1 に答える 1

2

あなたの問題は、2 つの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);
    }
}
于 2013-02-25T16:53:40.477 に答える