6

テスト対象のクラスの通常の実行に期待される値を返すように、テストクラスNonStrictExcpection()@Before/メソッドでJMockit を使用してモックしているオブジェクトがあります。setUp()

これは、このコードの非通常動作をテストする単一のテストを除いて、すべてのテスト メソッドで問題ありません。

テスト メソッドで新しい期待値を作成しようとしましたが、これは setUp メソッドの期待値をオーバーライドすると信じていましたが、setUp メソッドの期待値が新しい期待値を抑制していることがわかりました。

setUp の期待値を削除すると、テスト メソッドは期待どおりに動作します (ただし、他のすべてのテストは当然失敗します)。

最小量のコードで各テストの期待値を正しく定義できるように、テスト クラスをどのようにコーディングすればよいですか? (期待コードを各テストメソッドにコピー/貼り付けできることは知っていますが、回避できる場合はそうしたくありません)。

私のテスト コードは次のようになります (注、これは一種の疑似コードであり、コンパイルされませんが、アイデアは得られます)。

public class TestClass{

    @Before
    public void setUp(){

        // Here I define the normal behaviour of mockObject
        new NonStrictExpectations() {{
            mockObject.doSomething();
            result = "Everyting is OK!";
        }};

        // Other set up stuff...

    }

    // Other Tests...

    /**
     * This method tests that an error when calling 
     * mockObject.doSomething() is handled correctly.
     */
    @Test(expected=Exception.class)
    public void testMockObjectThrowsException(){

        // This Expectation is apparently ignored...
        new NonStrictExpectations() {{
            mockObject.doSomething();
            result = "Something is wrong!";
        }};

        // Rest of test method...

    }
}
4

2 に答える 2

6

Expectations私は通常、型を返すプライベートメソッドを作成します。

private Expectations expectTheUnknown()
{
    return new NonStrictExpectations()
    {{
        ... expectations ...
    }};
}

そして、正確な期待を必要とするテストメソッドでメソッドを呼び出すだけです。

@Test public void testUknown()
{
    expectTheUnknown();
    ... here goes the test ...
}
于 2011-02-14T06:43:18.990 に答える