메서드가 ObjectMapper.writeValueAsString을 사용할 때 모의 단위 테스트를 작성하는 방법

J. 카만 스

SpringMVC 프로젝트가 있습니다. 테스트하려는 FooController의 메서드는 다음과 같습니다.

@GetMapping("/view/{fooId}")
public String view(@PathVariable String fooId, Model model) throws FooNotFoundException, JsonProcessingException {
    Foo foo = fooService.getFoo(fooId);
    model.addAttribute("fooId", foo.getId());
    model.addAttribute("foo", new ObjectMapper().writeValueAsString(foo));
    return "foo/view";
}

내가 작성한 테스트는 다음과 같습니다.

public class FooControllerTest {
    @Mock
    private Foo mockFoo;
    @Mock
    private FooService mockFooService;
    @InjectMocks
    private FooController controller;
    private MockMvc mockMvc;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
    }

    @Test
    public void testView() throws Exception {
        String fooId = "fooId";
        when(mockFooService.getFoo(fooId)).thenReturn(mockFoo);
        when(mockFoo.getId()).thenReturn(fooId);

        mockMvc.perform(get("/foo/view/" + fooId))
                .andExpect(status().isOk())
                .andExpect(model().attribute("fooId", fooId))
                .andExpect(model().attributeExists("foo"))
                .andExpect(forwardedUrl("foo/view"));
    }

}

이 테스트는 java.lang.AssertionError: No ModelAndView found. 내가 테스트를 디버깅 할 때, 나는 나의이 때 잘못보고 mockFoo주어집니다 new ObjectMapper.writeValueAsString(). 그래서 모의 객체는 직렬화 할 수 없다고 생각합니다. 이 문제를 해결하려면 어떻게해야합니까? 테스트를 통과하려면 어떻게해야합니까?


내가 이미 시도한 것 :

  • 나는 model.addAttribute("foo", new ObjectMapper().writeValueAsString(foo));FooController 의 줄 주석을 달았 는데, 이런 방식으로 테스트가 작동했습니다 (하지만 내가 원하는 방식은 아닙니다)! 그래서 이제 나는 이것이 잘못된 곳임을 압니다.
  • .andExpect(model().attributeExists("foo"))FooControllerTest 의 줄 주석을 달았 지만 여전히 위의 AssertionError를 생성했습니다.
  • 인터넷 검색 및 StackOverflowing,하지만 유용한 것을 찾을 수 있습니다.
J. 카만 스

동료가 다음을 제안했습니다.를 사용하는 대신 mockFoo새 Foo 객체를 만들어 다음과 같이 사용했습니다.

@Test
public void testView() throws Exception {
    String fooId = "fooId";
    Foo foo = new Foo(fooId);
    when(mockFooService.getFoo(fooId)).thenReturn(foo);

    mockMvc.perform(get("/foo/view/" + fooId))
            .andExpect(status().isOk())
            .andExpect(model().attribute("fooId", fooId))
            .andExpect(model().attributeExists("foo"))
            .andExpect(forwardedUrl("foo/view"));
}

작동합니다. 나는 항상 당신이 테스트하지 않는 모든 객체를 모의해야한다고 생각했습니다 (따라서 컨트롤러에서는 컨트롤러 자체를 제외한 모든 것을 모의합니다). 그러나 Foo단순한 POJO 이기 때문에 조롱 할 필요가 없습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ASP.Net MVC : ValidationAttribute 및 IClientValidatable을 사용할 때 단위 테스트 코드를 작성하는 방법

분류에서Dev

junit을 작성할 때 Mockito 용 테스트 스위트를 만드는 방법

분류에서Dev

sinon을 사용하여 단위 테스트에서 Mongoose 모델 메서드를 스텁하는 방법

분류에서Dev

단위 테스트 : 메서드 단위 테스트에서 다른 방법을 사용할 때 제대로하고 있습니까?

분류에서Dev

단위 테스트를 검색 모드에서 실행할 때 전역 적으로 로깅을 구성하는 방법은 무엇입니까?

분류에서Dev

RGR 방법론을 사용할 때 속성 테스트를 단위 테스트로 실행해야합니까?

분류에서Dev

단위 테스트를 만들 때 메서드 내의 모든 호출을 패치하는 것이 좋은 방법입니까?

분류에서Dev

중첩 된 작업 / 콜백을 사용하여 메서드를 단위 테스트하는 방법

분류에서Dev

Future를 사용할 때 단위 테스트를 작성하는 방법은 무엇입니까?

분류에서Dev

HttpWebRequest / Response 종속성을 사용하여 메서드를 단위 테스트하는 방법

분류에서Dev

유효성 검사를 위해 서비스를 사용할 때 IValidatableObject 유효성 검사를 단위 테스트하는 방법은 무엇입니까?

분류에서Dev

C ++에서 메서드의 부작용을 단위 테스트하는 방법은 무엇입니까?

분류에서Dev

Android 단위 테스트 용 모의 커서를 정의하는 방법

분류에서Dev

Bluemix 빌드를 사용하고 PHP 단위 테스트로 테스트 작업을 배포하는 방법

분류에서Dev

메소드의 예외 핸들러에서 JUnit 테스트를 실행하는 방법과 함수가 일반적으로 입력을 위해 파일을 사용할 때 어떻게합니까?

분류에서Dev

여러 에이전트 (YAML)에서 실행할 테스트 아티팩트를 복사 할 때 Azure Devops에서 단위 테스트 DLL을 찾는 방법

분류에서Dev

걸쇠로 GAS를 테스트 할 때 종속성을 모의하는 방법

분류에서Dev

무작위로 생성 된 사용자 ID의 고유성을 단위 테스트하는 방법

분류에서Dev

모델에서 레코드 삭제를 테스트하는 단위 테스트를 작성하는 방법

분류에서Dev

Mockito를 사용할 때 봄 테스트에서 모의를 정리하는 방법

분류에서Dev

모듈에서 단위 테스트를 작성하는 올바른 방법?

분류에서Dev

Xamarin iOS C #을 사용하여 앱을 시작할 때 MainPage의 생성자에서 단추를 호출하는 방법

분류에서Dev

모델이 다른 클래스의 모델과 상호 작용할 때 Rspec 테스트를 구성하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

FragmentScenario로 조각을 테스트 할 때 메뉴와의 상호 작용을 테스트하는 방법

분류에서Dev

Perl 단위 테스트에서 모의 객체를 재사용하는 방법은 무엇입니까?

분류에서Dev

관련 메서드를 사용할 때 고유 속성을 재정의하는 방법은 무엇입니까?

분류에서Dev

단위 테스트에서 get ()을 사용할 때 null을 제공하는 명명 된 쿼리를 grails

분류에서Dev

Perl을 빌드 할 때 단일 실패 테스트를 테스트하는 방법

분류에서Dev

클래스 인수에 잘못 할당 된 값을 방지하는 단위 테스트가 주어지면이를 고려하는 메서드를 작성하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    ASP.Net MVC : ValidationAttribute 및 IClientValidatable을 사용할 때 단위 테스트 코드를 작성하는 방법

  2. 2

    junit을 작성할 때 Mockito 용 테스트 스위트를 만드는 방법

  3. 3

    sinon을 사용하여 단위 테스트에서 Mongoose 모델 메서드를 스텁하는 방법

  4. 4

    단위 테스트 : 메서드 단위 테스트에서 다른 방법을 사용할 때 제대로하고 있습니까?

  5. 5

    단위 테스트를 검색 모드에서 실행할 때 전역 적으로 로깅을 구성하는 방법은 무엇입니까?

  6. 6

    RGR 방법론을 사용할 때 속성 테스트를 단위 테스트로 실행해야합니까?

  7. 7

    단위 테스트를 만들 때 메서드 내의 모든 호출을 패치하는 것이 좋은 방법입니까?

  8. 8

    중첩 된 작업 / 콜백을 사용하여 메서드를 단위 테스트하는 방법

  9. 9

    Future를 사용할 때 단위 테스트를 작성하는 방법은 무엇입니까?

  10. 10

    HttpWebRequest / Response 종속성을 사용하여 메서드를 단위 테스트하는 방법

  11. 11

    유효성 검사를 위해 서비스를 사용할 때 IValidatableObject 유효성 검사를 단위 테스트하는 방법은 무엇입니까?

  12. 12

    C ++에서 메서드의 부작용을 단위 테스트하는 방법은 무엇입니까?

  13. 13

    Android 단위 테스트 용 모의 커서를 정의하는 방법

  14. 14

    Bluemix 빌드를 사용하고 PHP 단위 테스트로 테스트 작업을 배포하는 방법

  15. 15

    메소드의 예외 핸들러에서 JUnit 테스트를 실행하는 방법과 함수가 일반적으로 입력을 위해 파일을 사용할 때 어떻게합니까?

  16. 16

    여러 에이전트 (YAML)에서 실행할 테스트 아티팩트를 복사 할 때 Azure Devops에서 단위 테스트 DLL을 찾는 방법

  17. 17

    걸쇠로 GAS를 테스트 할 때 종속성을 모의하는 방법

  18. 18

    무작위로 생성 된 사용자 ID의 고유성을 단위 테스트하는 방법

  19. 19

    모델에서 레코드 삭제를 테스트하는 단위 테스트를 작성하는 방법

  20. 20

    Mockito를 사용할 때 봄 테스트에서 모의를 정리하는 방법

  21. 21

    모듈에서 단위 테스트를 작성하는 올바른 방법?

  22. 22

    Xamarin iOS C #을 사용하여 앱을 시작할 때 MainPage의 생성자에서 단추를 호출하는 방법

  23. 23

    모델이 다른 클래스의 모델과 상호 작용할 때 Rspec 테스트를 구성하는 가장 좋은 방법은 무엇입니까?

  24. 24

    FragmentScenario로 조각을 테스트 할 때 메뉴와의 상호 작용을 테스트하는 방법

  25. 25

    Perl 단위 테스트에서 모의 객체를 재사용하는 방법은 무엇입니까?

  26. 26

    관련 메서드를 사용할 때 고유 속성을 재정의하는 방법은 무엇입니까?

  27. 27

    단위 테스트에서 get ()을 사용할 때 null을 제공하는 명명 된 쿼리를 grails

  28. 28

    Perl을 빌드 할 때 단일 실패 테스트를 테스트하는 방법

  29. 29

    클래스 인수에 잘못 할당 된 값을 방지하는 단위 테스트가 주어지면이를 고려하는 메서드를 작성하는 방법은 무엇입니까?

뜨겁다태그

보관