0

単体テストの目的でモックされた Spring Context を作成しようとしています。私たちの Spring 構成はかなり大きく、Spring + Springockito Annotations を使用してこれを取得しようとしています。

私が遭遇した問題は、コンテキストの作成/モッキングを処理する複数の Java クラスが必要だということです。今のところ、これは次のようになります (クラス a がクラス B とクラス C のリストをコンストラクター引数として受け取るとしましょう):

//declaring context classes below
@ContextConfiguration(loader = SpringockitoAnnotatedContextLoader.class,
      classes = { 
          ClassA.class,
          ClassB.class,
          SubClassCOne.class,
          SubClassCTwo.class,
          ... //list goes on and on with more mocks
      }
)
public class Configurator {
   @Autowired
   ClassA classA;

   @ReplaceWithMock
   ClassB classB;

   @Autowired
   List<ClassC> classesC;

   @Autowired
   SubClassCOne subclassCOne;

   ....

問題は、C サブクラスのリストがここにあるよりもはるかに大きいことです (1 つのクラスだけにすべての責任を負わせていることは言うまでもありません)。そのため、次のような作成を処理する別のクラスを考えました。

ListProvider.java:

//THIS ANNOTATION WON'T BE TAKEN INTO ACCOUNT
@ContextConfiguration(loader = SpringockitoAnnotatedContextLoader.class,
      classes = {
          SubClassCOne.class,
          SubClassCTwo.class,
          ...
      }
)
public class ListProvider {
   @Autowired
   List<ClassC> classesC;

   ...
   public List<ClassC> getClassesC(){
       return classesC;
   }
   ...

Configurator.java:

@ContextConfiguration(loader = SpringockitoAnnotatedContextLoader.class,
      classes = {
          ClassA.class,
          ClassB.class,
          ListProvider.class,
          ...
      }
)
public class Configurator {
   @Autowired
   ClassA classA;

   @ReplaceWithMock
   ClassB classB;

   @Autowired
   ListProvider listProvider

   @Autowired //probably not autowired anymore?
   List<ClassC> classesC;

   ...
   //then somewhere it'll take classesC from listProvider using getter?

しかし、問題は、ListProvider が正しく自動配線されても、@ContextConfigurationクラスを利用せず、ClassC サブクラスを見つけられないということConfigurator.javaです。 .

このコンテキスト構成を複数のファイルに分割する変更はありますか?

4

1 に答える 1

0

構成をデフォルトに分離し、プロファイルを使用してテストします。

@Configuration
@ComponentScan(basePackages = "com.greg")
public class MainConfig {
}

@Configuration
@Profile("test")
public class TestConfig {
}

次に、テスト プロファイルを使用してテストを実行します

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=MainConfig .class)
@ActiveProfiles("test")
public class ATest {

したがって、テストは常に MainConfig を取得しますが、プロファイルがテストに設定されている場合にのみ TestConfig を取得します。@Profile を使用して、スキャンでロードされる Bean を区別することもできます。

于 2016-11-04T09:57:46.593 に答える