0

単体テストを作成して、別のオブジェクトを含むクラスをテストしたいと考えています。この 2 番目のオブジェクトのモックを作成しました。

最初のクラスのメソッドをテストするとき、2 番目のオブジェクトの関数が呼び出されるかどうかを確認したいと思います。このために、関数を使用しますverify(mock).myfunction();

私の問題は、オブジェクト 2 の同じ関数が、最初のクラスの複数の関数によって呼び出される可能性があることです。

テストクラスを書くとき、関数ごとにテスト関数を書いていますが、テストメソッドの先頭で「回数」がリセットされていないようです。

私が明確かどうかはわかりません。したがって、例:

public class Main  {
    public Object o = createObject();

    public void function1(){
        o.function();
    }

    public void function2(){
        o.function();
    }


    public Object createObject() {
        return new Object() ;
    }


public class MainTest {
    private static Main main;

    @BeforeClass
    public static void setUp() throws Exception {
        final Object mockO = mock(Object.class);

        main = new Main() {
            @Override
            public Object createObject() {
                return mockO;
            }
            }; 
    }

    @Test
    public void testfunction1(){
        verify(main.world[0], never()).function();
        main.function1();
        verify(main.world[0]).function();
    }

    @Test
    public void testfunction2(){
        verify(main.world[0], never()).function();
        main.function2();
        verify(main.world[0]).function();
    }

私がテストtestfunction1()してtestfunction2()無視した場合、それは仕事です。

私がテストtestfunction2()してtestfunction1()無視した場合、それは仕事です。

しかし、2 つのテストが実行されると、エラーが発生します。

org.mockito.exceptions.verification.NeverWantedButInvoked:
Object.function();
Never wanted here : 
-> at test.MainTest.testfunction1
but invoked here :
at source.Main.function2

2 つの機能を個別にテストするにはどうすればよいですか?

4

1 に答える 1

2

メソッドの名前を別の名前に変更setUp()し、非静的メソッドにし、それ@Beforeを and notにし@BeforeClassます。

private Main main;

@Before
public void initMain()
{
    // what you already do
}

@BeforeClassメソッドはクラス内のすべてのテストの前に 1 回実行されますが、メソッドはテストの@Before前に 1 回実行されます。

于 2013-01-07T10:29:42.113 に答える