12

統合テストを作成したい Spring XML Bean 定義があります。XML Bean 定義は、より大きなアプリケーション コンテキストの一部であり、<import>. 定義内では、他のファイルから取得したいくつかの Bean を参照しています。

私の統合テストでは、定義をスタンドアロンでインスタンス化し、他のすべての Bean に Mockito モックを使用したいと考えています。今まで、私は次のようなものを使用しています:

FooIntegrationTest.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class FooIntegrationTest {
  @Autowired private ClassUnderTest underTest;
  @Autowired private MockedClass mock;

  @Test
  public void testFoo() {
  }
}

FooIntegrationTest-context.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <import resource="part-to-test.xml" />

  <bean id="mockedClassReferencedByName" class="org.mockito.Mockito" factory-method="mock" c:classToMock="SomeMockedClass" />
  <bean class="org.mockito.Mockito" factory-method="mock" c:classToMock="OtherMockedClassReferencedByType" />
  <bean class="org.mockito.Mockito" factory-method="mock" c:classToMock="MockedClass" />
  ...
</beans>

かなり面倒なモック セクションを自動化したい: 理想的には、アプリケーション コンテキストで見つからないすべての Bean を自動的にモックしたいと考えています。名前参照を使用して設定されるpart-to-test.xml用途@Autowiredと Bean。XML Bean 定義ファイルのみを使用し、@Configurationクラスも@Component注釈も使用しません。

でカスタム コンテキスト ローダーを使用する方法を調べましたが@ContextConfiguration(loader=...)、そのための適切な拡張ポイントをまだ見つけていません。Sprinockito はこの問題に対処していないようです。

この問題をすでに解決している他のプロジェクトはありますか? そうでない場合、どこでSpringを拡張してモックを自動的に作成しますか?

4

2 に答える 2

6

これは、コード例を含む短い記事です。実装は、不足しているBeanDefinitionRegistryPostProcessorBean定義ごとにモックオブジェクトを生成します。生成部分はで行われMocksFactoryます。これはそのようなファクトリの例です

于 2012-04-24T07:27:28.077 に答える
3

誰かがまだこの質問に興味を持っている場合に備えて、Yves Martin が言及した記事のコードを継承、@Inject のサポートなどで拡張し、Github プロジェクトを作成しました: https://github.com/ rinoto/spring-auto-mock

于 2014-10-13T16:54:11.013 に答える