0

私は@DependsOnアノテーションを持つシングルトンを試そうとします。ここでは、前に初期化しなければならない別のシングルトンをマークします。しかし、テストでは、私はそれらをロードしたくない、私のテストのための多くの役に立たないクラスです。例の場合:私は注釈@DependsOnにシングルトンのクラスを参照してくださいしないarquillian例外が発生しましたArquillianテストで@DependsOnアノテーションを無効にする方法はありますか?

public class SomeSingletonIT extends Arquillian { 

    @Mock SomeClassInSingleton; 
    ... another mocks... 

    @Inject 
    @InjectMocks 
    SomeSingleton instance; 

    @BeforeClass 
    public void initMocks() { 
     mocks logic 
    } 



    @Deployment 
    public static WebArchive createDeployment() { 

     return ShrinkWrap.create(WebArchive.class, "test.war") 
       .addClasses(
         SomeSingleton.class 
         ) 
       .addAsLibraries(some Libs) 
       .addAsWebInfResource(EmptyAsset.INSTANCE,"beans.xml"); 
    } 

    @Test 
    public void testGetProactiveSubjects() throws Exception { 
     System.out.println("***----------------------------------***"); 
     assertNotNull(instance); 
     ...some assertions... 
     System.out.println("***----------------------------------***"); 
    } 

} 

@Singleton 
@DependsOn({"anotherSingleton1", "anotherSingleton2"...}) 
public class SomeSingleton { 
... methods and logic... 
} 

は、ここではテストの例です。しかし、私がテストアーカイブにそれらを含めるなら、私はすべての依存関係も含めなければなりません。そして、@ PostConstruct'sのinitsというロジックを嘲笑してください。だから...どのようにして@DependsOnを無効にしたり、模擬することができますか? 私はwildflyで管理されたコンテナでarquillianを使用します。

答えて

0

実際のシングルトンをデプロイするのではなく、テストデプロイメントで代用するテストダブルdummy objectを実装するのが私の考えです。これにより、テスト中のアーカイブをデプロイする際に、たくさんの依存関係や実行のオーバーヘッドが追加されることがなくなります。

+0

私はダミーシングルトンを作成し、@DependsOnで必要に応じて@Singleton(name = "amotherSingleton1")という名前をつけて、ShrinkWrapアーカイブに含めました。私のプロジェクトで、モックと同じように作成された無駄なクラスがあるときは好きです:)誰かがそれを実現する方法を知っていれば、私はあなたに謝るでしょう! –