Die Injektion Mockito Mock objects mit Spring JavaConfig und @Autowired

Ich versuche zu ersetzen @Autowired Objekt mit Mockito mock-Objekt. Der übliche Weg, dies zu tun, wurde mit xml mit Springockito:

<mockito:mock id="SomeMock" class="com.package.MockInterface" />

Derzeit bin ich versucht zu bewegen, um mit Spring JavaConfig für den job. Plötzlich ist die Java-Ausdrücke sind eine ganze Menge mehr Informationen als xml:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class MyTestClass {

    @Configuration
    static class Config {
        @Bean
        public MockInterface somethingSpecial() {
            return Mockito.mock(MockInterface.class);
        }
    }

    @Autowired MockInterface mockObj;

    //test code
}

Entdeckte ich eine Bibliothek namens Springockito-Annotationen, die ermöglicht es Ihnen, Folgendes zu tun:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=SpringockitoContextLoader.class)
public class MyTestClass {

    @Autowired @ReplaceWithMock MockInterface mockObj;

    //test code
}

Klar, eine ganze Menge hübscher 🙂 Das problem ist nur, dass dieser Kontext loader erlaubt mir nicht, zu verwenden @Configuration und JavaConfig für andere-Bohnen (wenn ich das Tue, Frühjahr beklagt, dass es keine Kandidaten, mit denen autowired Felder).

Tun Sie Jungs wissen, einen Weg, um von Spring JavaConfig und Springockito-Anmerkungen zu spielen schön? Alternativ gibt es noch ein Kürzel für die Erstellung von mocks?

Als ein netter bonus, mit Springockito und xml-config, ich war in der Lage zu verspotten, konkrete Klassen, ohne autowiring Kandidaten, um seine Abhängigkeiten (wenn es hatte). Ist dies nicht möglich, ohne xml?

  • Vielleicht bin ich ein bisschen verwirrt, aber warum nicht Sie @Autowired die Bohnen, die Sie wollen von Ihrem Anwendungskontext, und @Mock die Bohnen möchten Sie verspottet? Hinweis: wenn Sie @Mock, müssen Sie initialisiert werden diejenigen verspottet, die durch aufrufen MockitoAnnotations.initMocks(this) in der test-Klasse, die vor jedem test.
  • warum gehst du nicht einfach Draht von hand für Ihren test?
  • Wenn ich will, um den Draht von hand aus, die ich brauche, die Klasse zu wechseln, mir zu erlauben, injizieren Sie die mock-Objekte. Was Springockito können Sie tun, um die vorhandenen autowiring-Mechanismus zu injizieren verspottet.
  • Warum würden Sie haben, die Klasse zu wechseln? Wenn es injiziert durch Konstruktor, brauchen Sie nur den Konstruktor aufrufen. Wenn es injiziert durch setter, Sie brauchen nur zu rufen, der setter. Und wenn es über Feld-Injektion, die Sie gerade brauchen, um verwenden Sie die @Mock und @InjectMocks Anmerkungen in Ihrem test (der funktioniert auch mit Konstruktor und setter-Injektion).
InformationsquelleAutor jabalsad | 2013-02-15
Schreibe einen Kommentar