ある文字列に書き込んでいるクラスに、同じことを行う別のメソッドを呼び出すメソッドがあります。何かのようなもの:
void foo() {
a += "xyx";
bar();
}
void bar() {
a += "abc";
}
ユニットテストの目的で、fooとbarを別々にテストしたいと思います。foo()を呼び出したときにbarが実行されないようにする方法、または別のメソッドに置き換える方法はありますか?
ある文字列に書き込んでいるクラスに、同じことを行う別のメソッドを呼び出すメソッドがあります。何かのようなもの:
void foo() {
a += "xyx";
bar();
}
void bar() {
a += "abc";
}
ユニットテストの目的で、fooとbarを別々にテストしたいと思います。foo()を呼び出したときにbarが実行されないようにする方法、または別のメソッドに置き換える方法はありますか?
何もしないbar()をオーバーライドするサブクラスを作成します。
なぜそれをしたいのですか?
アスペクトを使用してバイト コード レベルでコードをインターセプトできます (賢明ではありません)。bar を呼び出すオブジェクトを取り込むことができます。void foo(MyBarObject m) {
a += "xyx";
m.bar();
}
しかし、私が言ったように、なぜこれが役立つのか考えられません。単体テストは、パブリック インターフェイスをテストするためのものです。bar() が非公開または保護されている場合、foo() への呼び出しとその後のアサーションによって自動的にテストされます。foo() と bar() の両方が公開されている場合は、それらを別々にテストしてください。
実際の例を投稿できますか?テスト中のコードを変更できますか? 等。
上記の例はテスト可能なコードではないと主張する人もいるかもしれません。代わりに、コードが次の場合:
void foo() {
a += "xyx";
}
void bar() {
a += "abc";
}
void fooBar() {
foo();
bar();
}
単体テストは簡単です。