0
:我對Spring比較陌生。首先用Mockito測試Spring MVC
我有3檔一個非常簡單的Spring啓動的應用程序: 主要應用:
@SpringBootApplication
public class App
{
public static void main(String[] args)
{
SpringApplication.run(App.class, args);
}
}
控制器:
@RestController
public class GreetingsController {
@Autowired
private SomeService svc;
@RequestMapping("/greeting")
public String greeting() {
System.out.println(svc.sayHello());
return svc.sayHello();
}
}
與 「服務」:
@Service
public class SomeService {
public String sayHello() {
return "Hello from the real thing";
}
}
我現在想寫一個(集成)測試,其中的服務(在我的真實應用程序中會有一些數據庫連接nection)被嘲笑。我所擁有的是這樣的:
@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());
}
}
不幸的是,因爲在測試過程中,而不是我的模擬服務正在使用的真正的服務測試失敗。我究竟做錯了什麼?我如何告訴框架在測試期間使用Mock服務?
感謝和問候
沒有使用Spring進行測試通常是一種儘可能採取的好方法。如果你確實需要模擬bean,你可能會對Spring Boot 1.4中的'@ MockBean'註釋感興趣(https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot- 1-4) –
@Phil Webb,謝謝。用Spring Boot熱愛你的工作。我們正在將所有的東西從JBOSS遷移到Pivotal Cloud Foundry。我們在過去的6年中使用過Spring應用程序,但總是被迫部署在JBOSS上。在另一個月左右沒有更多。 – duffymo