私がやりたいのは、
- クラスX(argで渡されるクラス変数)のインスタンスを生成し、
- そのメソッドの一部をオーバーライドします
より具体的には、オーバーライドする親クラスXIには次のものが含まれます
- デフォルトのコンストラクターは含まれていません(たとえば、argsを持つすべてのコンストラクター)
- 同じクラス内で非プライベートメソッドを呼び出すコンストラクター
もともと、リフレクションなどを使うのはとても簡単だと思っていましたが、要件の実装には限界があることに気づきました。
- 反映の場合:java.lang.reflect.Proxyhttp ://download.oracle.com/javase/1.3/docs/guide/reflection/proxy.htmlを介してのみ「インターフェース」をオーバーライドできます
- cglibの場合:デフォルトのコンストラクターのインスタンスと、非プライベートメンバーメソッドを呼び出すコンストラクターを作成することはできません http://insufficientinformation.blogspot.com/2007/12/spring-dynamic-proxies-vs-cglib-proxies.html
Mockitoはあらゆる種類のメソッドインジェクションランタイムを実行できるため、これは達成可能だと思います。
誰かアドバイスをお願いします、ありがとう。
私がイメージする擬似コードは次のようなものです。
createAndOverride(Class X) {
X newObj = X.newInstance(args) {
@override
methodOfX(args2) {
...
}
}
return newObj;
}
- 元の問題のシナリオ
X1.get()、X2.get()、X3.get()を呼び出すいくつかのメソッドを持つクラスをテストすることを目的としていました。
テストケースによっては、Xn.get()を作成して制御できるものを返す必要があります。テスト(例:null)
以下の制約のため:
- ただし、JMock 1.0に対するモックツールの制限により(コントロールがない:()、Xn.get()をモックして「someSpecifiedObjects」を返すことはできません。
- Xnにはnullコンストラクターと非プライベートメンバーを呼び出すコンストラクターはありません
私の回避策は、自作のXnクラスであり、それらをテストケースに渡して、Cn.get()を期待される
コード例にします。
ClassToTest.SomeMethod(new X1() {
@override
get() {
return someSpecifiedObjects;
}
});
そして、この種のことはテストケース全体に広がっています。
したがって、重複コードを減らすために、テスト用に指定されたオーバーライドされたメソッドを使用してXnインスタンスを生成するメソッドを構築したいと思います。例えば
X1 x1 = createAndOverride(X1);
次に、この投稿の問題が発生します