0

J'essaie de tester singleton qui ont des annotations @DependsOn où je marque d'autres singletons qui doivent être initialisés avant. Mais en test je ne veux pas les charger, car c'est beaucoup de classes inutiles pour mon test. Ex:Comment désactiver l'annotation @DependsOn dans les tests arquilliens?

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

est ici exemple de test:

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("***----------------------------------***"); 
    } 

} 

Je suis exception que Arquillian ne voit pas les classes de singletons dans l'annotation @DependsOn. Mais si je les inclue dans les archives de test, je devrai également inclure toutes leurs dépendances. Et se moquer de la logique qui est inits dans @ PostConstruct. Alors ... Comment désactiver ou mocker @DependsOn? J'utilise l'arquillian avec un conteneur géré par wildfly.

Répondre

0

Une idée qui me vient à l'esprit serait de mettre en œuvre un double de test - dummy object - que vous substitueriez dans votre déploiement de test plutôt que de déployer de véritables singletons. Cela vous éviterait d'ajouter des tonnes de dépendances et des frais d'exécution lors du déploiement de vos archives testées.

+0

ouais, j'ai juste essayé la même chose - j'ai créé des singletons factices et les ai nommés (@Singleton (name = "amotherSingleton1") comme requis au @DependsOn.) Et les ai inclus dans l'archive ShrinkWrap. J'aime pas quand il y a des classes inutiles dans mon projet qui a été créé comme des rires :) Si quelqu'un sait comment réaliser cela avec mockito - je serai appriciate à vous! –