2

ある文字列に書き込んでいるクラスに、同じことを行う別のメソッドを呼び出すメソッドがあります。何かのようなもの:

void foo() {
  a += "xyx";
  bar();
}

void bar() {
  a += "abc";
}

ユニットテストの目的で、fooとbarを別々にテストしたいと思います。foo()を呼び出したときにbarが実行されないようにする方法、または別のメソッドに置き換える方法はありますか?

4

3 に答える 3

8

何もしないbar()をオーバーライドするサブクラスを作成します。

于 2009-06-30T21:23:08.790 に答える
1

なぜそれをしたいのですか?

アスペクトを使用してバイト コード レベルでコードをインターセプトできます (賢明ではありません)。bar を呼び出すオブジェクトを取り込むことができます。void foo(MyBarObject m) { a += "xyx"; m.bar(); }

しかし、私が言ったように、なぜこれが役立つのか考えられません。単体テストは、パブリック インターフェイスをテストするためのものです。bar() が非公開または保護されている場合、foo() への呼び出しとその後のアサーションによって自動的にテストされます。foo() と bar() の両方が公開されている場合は、それらを別々にテストしてください。

実際の例を投稿できますか?テスト中のコードを変更できますか? 等。

于 2009-06-30T21:38:03.783 に答える
1

上記の例はテスト可能なコードではないと主張する人もいるかもしれません。代わりに、コードが次の場合:

void foo() {
  a += "xyx";
}

void bar() {
  a += "abc";
}

void fooBar() {
  foo();
  bar();
}

単体テストは簡単です。

于 2009-06-30T22:06:00.500 に答える