2017-11-14 1 views
-2

컨트롤러 포스트 방법으로 '통과'모델 : 이제 난봄 시험 : 어떻게 봄 부팅에서 일하고 있어요 및 다음과 같습니다 컨트롤러에 대한 통합 테스트를 작성하는 것을 시도하고있다

public String pagerequestSubmit(@ModelAttribute Pagerequest pagerequest, Model model) { 
... 
} 

을 이 같은이 컨트롤러에 대한 통합 테스트 작성하려고 :

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) 
@ContextConfiguration(classes=PageAnalyzerInSpringApplication.class) 
public class PagerequestControllerIntegrationTest { 

@Autowired 
PagerequestController pagerequestController; 

@Test 
public void testHappyPath() { 


    Pagerequest mockPageRequest = new Pagerequest(); 
    mockPageRequest.setUrl("https://www.somedomain.com/"); 
    .... 

    String outcome = pagerequestController.pagerequestSubmit(mockPageRequest); 

    assertThat(outcome, is(equalTo("result"))); 

} 

내가 어떤 문제를 '모의 pagerequest을'일을하고 포스트 방식으로 전달을 필요는 없습니다, 그래서 멀리 얻었으나, 위의 테스트 내가 얻을 수 있기 때문에 작동하지 않습니다.

내가 이와 난 유형 모델의 인수를 전달 아니에요 때문에 의미가

"유형의 PagerequestController의 방법 pagerequestSubmit (Pagerequest, 모델) 인수 (Pagerequest) 적용 할 수 없습니다" 그것을하는 방법에 완전히 붙어 있습니다.

작동하지 않는 Model을 인스턴스화하려고 시도했습니다. 또한 작동하지 않는 가짜 모델을 만들고 적어도 실행중인 테스트를 얻는 null 인 Model 변수를 전달합니다. 컨트롤러에서 모델이 사용 중일 때 널 포인터 예외를 던집니다.

해결 방법에 대한 아이디어가 있으십니까?

미리 감사드립니다.

답변

0

귀하의 pagerequestSubmit(@ModelAttribute Pagerequest pagerequest, Model model)은 pagerequest와 다른 모델을 두 가지 인수로 받아 들일 수 있지만 테스트에서는 pagerequest 만 전달합니다. 모델 객체도 전달해야합니다. 테스트 클래스에서 메소드 서명이 잘못되었습니다. 모델 객체의 모의를 만들고 또한

@Mock 
    private Model model; 

String outcome = pagerequestController.pagerequestSubmit(mockPageRequest,model); 
assertThat(outcome, is(equalTo("result"))); 
+0

당신이 봄 MV의 C 테스트를 참조하십시오 사용할 수있는 코드에 붙여 넣습니다 : HTTPS : //stackoverflow.com/questions/40120991/spring-mvc-how-to- unit-test-models-attribute-from-a-controller-method-that-ret – Pradeep

+0

고마워요 @Pradeep - 모의 주석에서 트릭을했습니다! –

관련 문제