2

キャストされた値を渡してオーバーロードされたメソッドをモックしようとすると、次のエラーが発生します。

たとえば、嘲笑するために ABCClass.logWarn(Logger log,String , String description, Throwable e);

私がやっている

`ABCClass.logWarn(null,WarningString, description, (Throwable)null); 
...\\ The rest of the methods are standard...
verify(event).setStatus((Throwable)null);//**Line 76**

しかし、テストケースを実行すると、次のエラーが発生します

  ABCClassTest.testLogWarn:76 
    Wanted but not invoked:
    MockEvent.setStatus(null);
    -> at com.path.ABCClassTest.testLogWarn(ABCClassTest.java:76)

However, there were other interactions with this mock:.....

setStatus(null)を具体的に呼び出した後でも、 が呼び出されること が期待されるのはなぜsetStatus((Throwable)null);ですか?

追加の詳細

logWarn の定義

private static void logWarn(String eventType, String eventName, String errMsg, Throwable e) {

        AnEvent event = AnEventFactory.create(eventType);
        event.setName(eventName);
        if(e!=null)
            event.setStatus(e);//so this is never called if the throwable is null.
    //How do I modify the verify behavior?
        /*
                   Bleh */


        event.completed();
    }
4

2 に答える 2

1

キャストは、変数が参照するオブジェクトを変更しません。変数をその型と一致しない方法で使用しても、コンパイラが文句を言わないようにするだけです。つまり、あなたは本当にあなたnullの. setStatusverify

もちろん、setStatusテストしているコードによって が実際に呼び出されない理由を尋ねている場合は、誰かに教えられる前に投稿する必要があります。

于 2013-08-13T20:47:16.650 に答える