2016-09-13 4 views
0

Ist es möglich, alle injizierten Abhängigkeiten innerhalb einer MockedBean einfach zu ignorieren/spotten?Wie man irgendwelche Dienstleistungen innerhalb eines @MockedBean vortäuscht?

Beispiel:

@Service 
public class MyService { 
    @Autowired 
    private MailerService mailer; 

    public void test1() { 
     //does not use mailer 
    } 

    public void test2() { 
     //... 
     mailer.send(); 
    } 
} 

@Service 
public class MailerService { 
    //I want these to be automatically mocked without explicit declaration 
    @Autowired 
    private JavaMailSender sender; 

    @Autowired 
    private SomeMoreService more; 

    //also these should be mocked without having to provide properties 
    @Value("${host}") private String host; 
    @Value("${user}") private String user; 
    @Value("${pass}") private String pass; 
} 

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest 
public class MyServiceTest { 
    @Autowird 
    private MyService myservice; 

    @MockBean 
    private MailserService mailer; 

    @Test 
    public void test1() { 
     myservice.test1();  
    } 
} 

konnte ich @MockBean verwenden Mailer Injektion Abhängigkeit auszusortieren. Aber jeder Service innerhalb der verspotteten Bohne müsste auch explizit verspottet werden.

Frage: ist es möglich, einen Dienst "weg" zu verspotten. Bedeutet, nur die Bohne verspotten und egal was ist in der @MockedBean (oder automatisch auch etwas in @MockedBean spotten)?

+1

Nicht zu verwenden, die ich kenne. Programmieren zu Schnittstellen wäre die einfachste Lösung. Der 'mailerService' ist immer noch eine Spring-Managed-Bean (obwohl ein Mock). Es wird also noch verarbeitet und da es sich um eine Klasse handelt, werden die Annotationen noch bearbeitet. –

Antwort

0

Was mich der beste Weg, Mocks zu injizieren ist MockitoJUnitRunner

@RunWith(MockitoJUnitRunner.class) 
public class MocksTests { 

    @InjectMocks 
    private ParentService parent; 

    @Mock 
    private InnerService inner; // this will be injected into parent 

    //your tests 

} 
+0

Nun, aber ich würde gerne im Zusammenhang mit 'Spring-Boot-Test' laufen und somit' SpringJUnit4ClassRunner.class' verwenden. – membersound

Verwandte Themen