2

これは、リモート例外をスローするように強制したい私のコードです。

transient Bicycle b=null;

public Bicycle getBicycle() {
    if(b==null) {
        try {
            b=new Bicycle(this);
        } catch (RemoteException ex) {
            Logger.getLogger(Bicycle()).log(Level.SEVERE, null, ex);
        }
    }
    return b;
}

これが私がMockitoで実行しているJUnitテストです:

boolean exceptionThrown=false;
Bicycle mockB = mock(Bicycle);
mockB.setBicycle(null);
stub(mockB.getBicycle()).toThrow(new RemoteException(){boolean exceptionThrown = true;});

assertTrue(exceptionThrown);

次のエラーが発生し続けます。

Checked exception is invalid for this method!

どんな助けでもありがたいです。

編集:

それ以外の

stub(mockB.getBicycle()).toThrow(new RemoteException(){boolean exceptionThrown = true;});

私も試しました

doThrow(new RemoteException(){boolean exceptionThrown = true;}).when(mockB).getBicycle();

Mockito.when(mockB.getBicycle()).thenThrow(new RemoteException(){boolean exceptionThrown=true;});

まだ運がない。

Edit2-APIを完全に理解し、正しく使用した後、さらに一歩進んだ:

when(mockB.getBicycle()).thenThrow(new RuntimeException());

今、アサートする方法がわかりません。例外が呼び出されたらブール値を設定しようとしましたが、assertはブール値を認識できません。

何か案は?

4

1 に答える 1

4

getBicycle()メソッドがRuntimeExceptionを返すことはありません。コード自体がRuntimeExceptionをキャッチしており、キャッチされるとロガーに書き込みます。メソッド自体はBicycleまたはnullを返します。

getBicycleメソッドをどのように動作させるかを再考する必要があります。RuntimeExceptionをバブルスルーさせたい場合は、RuntimeExceptionatferロギングを再スローできます。しかし、それがどのように書かれているかに基づいて、RuntmeExceptionはJUnitテストに到達することはありません

于 2013-03-23T04:43:16.637 に答える