2

このブログのコードを使用して、単体テストに Mockito モックを挿入しました。ただし、モックが自動配線される前に、JDK プロキシで Spring によってラップされます。これにより、verify(autowiredMock) は「verify() に渡された引数はモックではありません!」をスローします。. この例外は、verify(..) に渡された引数がこのメソッドの有効な Mockito モック オブジェクトであることを Mockito がチェックしているときにスローされます。

private static Method getCallbacksSetter(Class type, String methodName) throws NoSuchMethodException {
    return type.getDeclaredMethod(methodName, new Class[]{ Callback[].class });
}

私の質問は、BeanFactoryPostProcessor に登録した Mockito モック Bean をプロキシしないように Spring に指示する方法ですか? proxy-target-class="true" の設定は避けたいので注意してください。

ありがとう

4

2 に答える 2

0

Mockito の最新バージョン (現在 1.9.0) では、この問題が修正され、オブジェクトがモックかどうかを検出するアルゴリズムが変更されました。

于 2012-05-09T13:17:03.630 に答える
0

モックを setter メソッドにオートワイヤすると、そこで手動でアンラップできます。

@Autowired public setMockedService(MyServiceInterface service) {
    mockedService = unwrapped(service) // to implement unwrapped(), you might use AOPUtils
}

それは醜いですが、それは抜け道ですproxy-target-class

余談ですが、嘲笑がこれほどの苦痛を与えているのであれば、スタブソリューションを検討すべきではないでしょうか?

于 2011-01-07T20:24:30.100 に答える