2

便利なメソッドを追加するために拡張したいサードパーティのライブラリクラスがあるとします (たとえば、既定のパラメーターを使用して継承されたメソッドを呼び出すことができます)。

jUnit/jMock を使用して、継承された正しいメソッドが呼び出されていることをテストするアサーション/モックの期待値を記述できますか?

たとえば、次のようなものです。

class SomeClass extends SomeLibraryClass {
    public String method(String code) {
         return method(code, null, Locale.default());
    }
}

methodそれが呼び出されているとどのように断言できますか?

4

4 に答える 4

4

単体テスト内にさらにサブクラスを作成して、実際に次のことを伝えることができます。

public class MyTest {
    boolean methodCalled = false;

    @Test
    public void testMySubclass(){
          TestSomeClass testSomeClass = new TestSomeClass();
          // Invoke method on testSomeclass ...
          assertTrue( methodCalled);

    }  
    class TestSomeClass extends SomeClass{
        public String method(String code){
              methodCalled = true;
        } 
     }
}
于 2009-05-12T16:53:25.867 に答える
2

単体テストは、カバレッジを主張するためではなく、特定のメソッドの機能を検証するために役立ちます。どのメソッドが呼び出されたかを気にする単体テストは、テストしているクラスについて、おそらく必要以上に多くのことを知っています。言うまでもなく、読者を混乱させるでしょう。

CoberturaEMMAなどのカバレッジ ツールを使用すると、コードが適切にカバーされているかどうかがわかります。

于 2009-05-12T17:09:43.983 に答える
1

この場合、統合テストのみを作成する方が確かに良いかもしれませんが、本当に単体テストが必要な場合は、他の場合と同じように簡単に実行できます。

public class SomeClassTest
{
    @Test
    public void testMethod()
    {
        final String code = "test";

        new Expectations()
        {
            SomeLibraryClass mock;

            {
                mock.method(code, null, (Locale) any);
            }
        };

        new SomeClass().method(code);
    }
}

このテストでは、JMockitモックAPIを使用します。

于 2009-12-17T13:21:17.937 に答える
0

より具体的な例がなければわかりませんが、これは単体テストではなく、統合テスト(パッケージ全体を一緒にテストする)である必要があると思います。ユニットテストでは、きめが細かすぎる場合があります。

于 2009-09-05T11:56:01.057 に答える