0

Ich versuche Singleton zu testen, die Annotation @DependsOn haben, wo ich andere Singletons markiere, die vorher initialisiert werden müssen. Aber im Test möchte ich sie nicht laden, weil es viele nutzlose Klassen für meinen Test gibt. Für die Ex:Wie deaktiviert @DependsOn Annotation in Arquillian Tests?

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

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

} 

ich Ausnahme bekam, die nicht sehen Klassen von Singletons in Anmerkung @DependsOn Arquillian. Aber wenn ich sie in das Testarchiv einbeziehe, muss ich auch alle ihre Abhängigkeiten einbeziehen. Und verspotten Sie eine Logik in ihnen, die in @ PostConstruct's. Also ... Wie kann ich @DependsOn deaktivieren oder vortäuschen? Ich benutze Arquillian mit wildfly verwalteten Container.

Antwort

0

Eine Idee, die mir in den Sinn kommt, wäre die Implementierung eines Testdoppels - dummy object - den Sie in Ihrer Testbereitstellung ersetzen würden, anstatt echte Singletons zu implementieren. Auf diese Weise können Sie bei der Bereitstellung des zu testenden Archivs nicht unnötig viele Abhängigkeiten und zusätzlichen Ausführungsaufwand aufwenden.

+0

Ja, ich habe gerade versucht ähnliches Ding - ich habe Dummy-Singletons erstellt und benannte sie (@Singleton (name = "amotherSingleton1") wie bei @DependsOn erforderlich. Und sie in das ShrinkWrap-Archiv. Funktioniert gut, aber ich don Es ist wie wenn es in meinem Projekt nutzlose Klassen gibt, die nur als Mocks erstellt wurden :) Wenn jemand weiß, wie man das mit Mockito realisiert - ich werde dir dankbar sein! –

Verwandte Themen