2016-05-31 3 views
0

우선 : 나는 Spring에 대해 약간 새로운 편이다.Mockito로 봄 MVC 테스트하기

@RestController 
public class GreetingsController { 

    @Autowired 
    private SomeService svc; 

    @RequestMapping("/greeting") 
    public String greeting() { 
     System.out.println(svc.sayHello()); 
     return svc.sayHello(); 
    } 
} 

과 "서비스 ': 메인 응용 프로그램 :

@SpringBootApplication 
public class App 
{ 
    public static void main(String[] args) 
    { 
     SpringApplication.run(App.class, args); 
    } 
} 

컨트롤러

@Service 
public class SomeService { 

    public String sayHello() { 
     return "Hello from the real thing"; 
    } 
} 

I

나는 3 파일을 매우 간단한 봄 부팅 응용 프로그램이 이제는 (통합 테스트) 서비스를 작성하고 싶습니다. (실제 응용 프로그램에서는 DB를 사용할 것입니다.) 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 서비스를 사용하도록 프레임 워크에 어떻게 알릴 수 있습니까?

감사 및 인사

답변

1

생산 및 테스트를 위해 별도의 구성이 필요합니다.

프로덕션 구성은 실제 클래스를 삽입하도록 Spring에 요청합니다. 테스트 구성이 대신 모의에 잠입합니다.

최근에 저는 스프링없이 테스트하려고했습니다. 나는 모키 토를 사용하고 내 테스트에서 수동으로 주입한다. 나는 콩 공장을 버려 둔다. 그래서 테스트에 필요한 빈만을 인스턴스화하기 때문에 모의 객체를 사용할 수 있고 내 테스트를 더 빨리 수행 할 수 있습니다.

+0

Spring을 사용하지 않는 테스트는 가능할 때마다 수행하는 것이 일반적으로 좋은 방법입니다. bean을 모방 할 필요가 있다면 Spring Boot 1.4 (https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-)에서 나오는'@ MockBean' 주석에 관심이있을 것이다. 1-4) –

+0

@ Philweb, 고마워. Spring Boot로 작업을 사랑하십시오. 우리는 JBOSS에서 Pivotal Cloud Foundry에 이르기까지 모든 것을 마이그레이션하고 있습니다. 지난 6 년 동안 Spring 애플리케이션을 보유했지만 JBOSS에 항상 적용해야했습니다. 다른 한 달 만에 더 이상 없습니다. – duffymo