vor allem: Ich bin ziemlich neu in Spring.Test Spring MVC mit Mockito
Ich habe eine sehr einfache Feder-Boot-App mit 3 file: Haupt App:
@SpringBootApplication
public class App
{
public static void main(String[] args)
{
SpringApplication.run(App.class, args);
}
}
Controller:
@RestController
public class GreetingsController {
@Autowired
private SomeService svc;
@RequestMapping("/greeting")
public String greeting() {
System.out.println(svc.sayHello());
return svc.sayHello();
}
}
und ein "Service":
@Service
public class SomeService {
public String sayHello() {
return "Hello from the real thing";
}
}
I Jetzt möchte ich einen (Integrations-) Test schreiben wo der Dienst (welcher in meiner realen Anwendung einen DB con hat) nection) wird verspottet. Was ich habe, ist dies:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = App.class)
@WebAppConfiguration
public class AppTest
{
private MockMvc mockMvc;
@Mock
private SomeService svcMock;
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void setup() throws Exception {
MockitoAnnotations.initMocks(this);
Mockito.when(svcMock.sayHello()).thenReturn("Hello from Mock");
this.mockMvc = webAppContextSetup(webApplicationContext).build();
}
@Test
public void run() throws Exception {
MvcResult res = mockMvc.perform(get("/greeting"))
.andExpect(status().isOk())
.andReturn();
assertEquals("Hello from Mock", res.getResponse().getContentAsString());
}
}
Leider ist dieser Test nicht besteht, weil der eigentliche Dienst wird während des Tests verwendet wird und nicht meine Mock-Service. Was mache ich falsch? Wie kann ich dem Framework mitteilen, den Mock-Service während des Testens zu verwenden?
Danke und Grüße
Testen ohne Feder ist in der Regel ein guter Ansatz, wann immer es möglich ist. Wenn Sie Bohnen verspotten müssen, könnten Sie an der Annotation "@ MockBean" in Spring Boot 1.4 interessiert sein (https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot- 1-4) –
@Phil Webb, danke. Liebe deine Arbeit mit Spring Boot. Wir migrieren alle unsere Sachen von JBOSS zu Pivotal Cloud Foundry. Wir hatten in den letzten 6 Jahren Spring-Apps, mussten aber immer auf JBOSS bereitstellen. Nicht mehr in einem anderen Monat oder so. – duffymo