2017-06-12 22 views
1

異なる実装と実行時設定でテストする必要がある汎用コードベースがあります。複数のDAO実装でサービスを考える私はDaoインターフェースをテストする一般的な単体テストを持っています(私はDAOをautowiredにする必要があります)、これらを別のプロジェクトから呼び出す必要があります。異なるプロジェクトで複数のSpringコンテキストを持つJUnitテストを実行する

本質的に私はこのようなものが欲しいです。 共有された汎用プロジェクトでは、私のテストは生きるでしょう。 したがって、共有プロジェクトでは、たとえば、私のテストがあります。

public class ApiTest { 

@Autowired 
DaoBase myDao; 

    @Test 
    public void testSomething(){ 
    } 
} 

はその後ダオを実装し、他のプロジェクト(複数可)に、私が持っているでしょう:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = { ImplementationConfigA.class }) 
public class ImplemtationTesterA { 

    //somehow invoke ApiTest.class? 
} 

@Configuration 
public class ImplementationConfigA{ 
    @Bean 
    DaoBase daoBase { 
     return new DaoImplementationGraphDB(); 
    } 
} 

は再び、さまざまな方法でDAO層を実装する複数のプロジェクトがある、と私は、一般的なテストを共有したいです。

@RunWith(SpringJUnit4ClassRunner.class)と@RunWith(Suite.class)を組み合わせることができれば、私の望むものと同じになりますが、それは可能ではないようです。すなわち、これは不可能である、私が欲しいものを効果的に次のようになります。

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = { ImplementationConfigA.class }) 
@RunWith(Suite.class) 
@Suite.SuiteClasses({ ApiTest.class }) 
public class ImplemtationTesterA { 
... 

任意のアイデア...この作業のようなものを得るためにトリックがあるように持っていますか?ありがとう!

答えて

0

使用profiles

@Configuration 
@Profile("profileA") 
public class ImplementationConfigA{ 
    @Bean 
    DaoBase daoBase { 
     return new DaoImplementationGraphDB(); 
    } 
} 

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = { ImplementationConfigA.class }) 
@RunWith(Suite.class) 
@Suite.SuiteClasses({ ApiTest.class }) 
@ActiveProfiles("profileA"); 
public class ImplemtationTesterA { 
... 
+0

私はプロファイルを使用してこの問題を解決するとは思わない。つまり、ImplementationTesterAから、ApiTestクラスのすべてのテストをImplementationConfigAで指定されたコンテキストで実行する必要があります。言い換えれば、SpringのSpringJUnit4ClassRunnerは、少なくとも私が見つける限り、@RunWith(Suite.class)および@ Suite.SuiteClasses({ApiTest.class})と同等のメカニズムを提供しません。 – crig

+0

しかし、プロファイルを使って同じことを達成することができます。これは実行するテストセットのタグのようなものです。 –

+0

しかし@RunWith(SpringJUnit4ClassRunner.class)と@RunWith(Suite.class)を組み合わせることはできません。ですから、SpringテストクラスImplemtationTesterAから、ApiTestクラス(別のプロジェクトにあります)のすべてのテストを実行するにはどうすればよいですか? ApiTestにはAPIの一般的なテストがあり、これらの実装のさまざまな実装や設定は認識されていません。それが知っていることは、インタフェースのインプリメンテーションが注入されることを期待することだけです。私は、複数の実装がこれらの共有テストを使用できるようにしたいと思います。 – crig

0

だけ更新する:私はすべての共有のテストを置く終了 は、各共有テストクラスを拡張し、「ダミー」のテストクラスを作成し、各DAOの実装プロジェクトで、その後のプロジェクト、およびです。各テストクラスは各実装プロジェクトで重複する必要があったため、スイートを定義するほど便利ではありませんが、機能します。

元の例では、ImplemtationTesterAがApiTestを拡張するために必要な変更のみでした。