4

catch実際、これはコードカバレッジ用であり、ステートメントをカバーするのに苦労しています。何か案は?

例えば:

私のselectSomethingBySomething()メソッド(dbから選択)にSQLException、実際のソースコードに実際に触れることなく、テストメソッドでかなり難しいメソッドをスローさせたいです。WHEREまた、私が制御できるのは句のパラメーターであるという制約もあります。

4

4 に答える 4

9

selectSomethingBySomething()最初にを含むクラスをモックしてから、この動作を記録する必要があります。では、次のように言います。

SomeDao someDaoMock = mock(SomeDao.class);

willThrow(new SQLException())).given(someDaoMock).selectSomethingBySomething();

someDaoMock次に、テスト対象のクラスに注入し、それが呼び出されると、someDaoMock.selectSomethingBySomething()以前に選択された例外がスローされます。

于 2012-07-19T16:32:53.577 に答える
1

EasyMockを使用すると、クラスとその特定のクラスのメソッド呼び出しをモックできます。

例えば:

DoSomethingDAOがClassNameの場合、

DoSomethingDAOmockDAOのようにクラスをモックします

EasyMock.createMock(DoSomethingDAO.class);

これで、このmockDAOから行われているすべての呼び出しをモックする必要があります。

メソッドが値を返す場合は、以下のように呼び出しをモックする必要があります。

EasyMock.expect(mockDAO.selectSomethingBySomething()).andReturn(EasyMock.anyObject());

メソッドが例外をスローした場合、以下はメソッド呼び出しです

EasyMock.expect(mockDAO.selectSomethingBySomething()).andThrow(new (typeofExecption));

voidメソッドの場合

mockDAO.selectSomethingBySomething();
EasyMock.expectLastCall().atleastOnce();
于 2012-07-20T10:28:33.157 に答える
-1

それを行う方法はたくさんありますが、私のアドバイスは100%のコードカバレッジを目指すことではありません。それは単にそれだけの価値はありません。あなたはごくわずかな利益のためにあなた自身の人生を困難にしています。

ただし、本当にテストしたい場合は、コードを変更してテストしやすくするのがおそらく最善の方法です。データアクセスクラスにインターフェイスを実装させてから、モックフレームワーク(JMockなど)を使用してモックアウトし、SQLExceptionをスローします。(具体的なクラスをモックすることはできますが、それは嫌われています。)

于 2012-07-19T16:36:19.013 に答える
-1

実際には、トリックを実行するために追加のフレームワークは必要ありません。方法は次のとおりです。

    Exception hasToBeThrown = null;
    try {
                 methodThatShouldThrow();
    } catch (Exception e) {
        assertTrue(e.getMessage().startsWith("if you want to...")); // JUnit will miss this, if not thrown, so we need more
        hasToBeThrown = e;
    }
    assertNotNull(hasToBeThrown); // but this will do
于 2018-09-11T11:12:31.527 に答える