クラス (「ClassUnderTest」としましょう) と特定のライブラリ クラス (「ヘルパー」と呼びましょう) の使用を単体テストしようとしています。そのため、モック化されたヘルパーを ClassUnderTest に挿入し、Expectations を使用してチェックしています。
public class TestUseOfHelper {
@Autowired ClassUnderTest classUnderTest;
@Mocked HelperClass helper;
[...]
@Before
public void setUp() throws Exception {
Deencapsulation.setField(classUnderTest, "helper", helper);
}
[...]
@Test
public void test() {
new Expectations() {{
helper.doSomething(any);
}};
classUnderTest.useHelper();
}
ここまでは順調ですね。
他のテスト (同じパッケージ、異なるファイル) では、ClassUnderTest の他の側面をテストしており、ヘルパーにその機能を実行させたいだけです。
public class TestOtherQualities {
@Autowired ClassUnderTest classUnderTest;
[...]
@Test
public void test() {
result = classUnderTest.processSomething();
assertNonNull(result);
}
これらのテストも問題なく動作します。
一連のテストを実行すると、問題が発生します。さて、2 番目のセットは失敗します。これは明らかに、モック ヘルパーがまだ配置されているためです!
完全なスイートが同じ JVM で実行され、Spring が 1 つの ClassUnderTest を作成し、指示どおりにモックを注入すると仮定しますが、次のテストには同じ ClassUnderTest オブジェクトを再利用するだけです。それらを別々に保つにはどうすればよいですか?個別のテスト ファイルごとに「新しい」オブジェクトを取得するにはどうすればよいですか? 私が取得していない/グーグルしているものは何ですか?
私は、Expectations ブロック内でオブジェクトを定義し、@Tested/@Injected を使用してさまざまなバリエーションを試しましたが、うまくいきませんでした。ところで、他のテストでヘルパーを嘲笑することは避けています。また、ClassUnderTest は一連の他のオブジェクトを自動配線し、それがさらに他のオブジェクトを自動配線するため、ClassUnderTest が参照するすべてのものをモックすることは実際的ではありません。
何か洞察がありますか、知識豊富なスタック オーバーフロー マジック 8 ボールですか? (「後で試す」は使用できません。)