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)?
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. –