0

私は単体テストを書いていて、非常に複雑な設定をしています。

従属 Bean はいくつかのリスナーをセットアップし、それらに autowired サービスを渡します。

リスナーが存在することをテストしたいが、それらを呼び出さないため、自動配線されたサービスの代わりに「null」を渡したい。(具体的には:私はセッターを持っていません...)

@Autowired
SomeService1 service1

@Autowired
SomeService2 service2


public List getListeners() {
  List l = new ArrayList();
  l.add(new AaaListener(service1));
  l.add(new BbbListener(Service2));
  return l;
}

@Test
public void testListeners() {
  int exptecedSize = 2;

  sut.doSomething();

  List l = sut.getX().getY().getListeners()

  assertEquals(expectedSize,l.size());
}

SUT は、リスナーを返すクラスに間接的に依存していることに注意してください。

これは大きな設定からの非常に小さな例であるため、リスナーの動作ではなく存在のみをテストしたいので、ここでは特にモックを使用したくありません。

そのようなサービスの 20 または 30 をモックすると、テストが大幅に遅くなります。

質問: 自動配線されたインスタンス変数にこれらの null を挿入する最も簡単な方法は何ですか?

A) セッターを追加しますか?

B) ReflectionUtils ?

C) java-config + @Beans + null を返す?

4

2 に答える 2

1

クラスがインスタンス化されたとき、それらはすでにnull...または実際に春のコンテキストでそれらを実行していますか?

このようにxml構成でプロパティをnullに設定できます(ドキュメントから)

<bean class="ExampleBean">
    <property name="email"><null/></property>
</bean>
于 2013-05-03T08:28:00.573 に答える
1
  1. Spring コンテキストを使用せず、手動でクラスを作成する
  2. ReflectionTestUtilsフィールドを設定するために使用します。ReflectionTestUtils非公開フィールドの設定を可能にしますReflectionUtils
于 2013-05-03T11:15:14.787 に答える