2016-12-05 7 views
3

스프링 부트를 사용하고 있는데 테스트를 만들려고합니다.서비스 계층 메서드 테스트가 실행 중일 때 ResourceNotFoundException이 발생합니다.

사실 내 테스트 클래스 : 내 memberService 클래스와 getMemberById 방법에서

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT) 
public class MemberServiceImplTest { 

    @InjectMocks 
    MemberServiceImpl memberService; 

    @Mock 
    MemberRepository memberRepository; 

    @Mock 
    Member member; 

    @Before 
    public void initMocks() { 
     MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void getMemberId() { 

     Long memberId = 1l; 
     Member member = new Member(); 
     ... 
     Mockito.when(memberRepository.findOne(memberId)).thenReturn(member); 
     MemberDto memberDto = memberService.getMemberById(memberId); 
     ... 
    } 

, 내가 memberRepository 클래스의 findOne 방법에 대한 호출을한다. 멤버가 발견되지 않으면 ResourceNotFoundException 예외가 발생합니다.

왜이 오류가 발생하는지 이해가되지 않습니다. 올바른 특수 효과를 사용하고 있지 않습니까?

+0

나는 이런 문제에 대해 힘들다는 것을 알고 있지만, 문제로부터 Minimal, Complete, Verifiable Example (http://stackoverflow.com/help/mcve)을 만들 수 있다고 생각합니다. 그것은 정말로 도움이 될 것입니다. – entpnerd

+0

처음에는 테스트 코드가 Spring과 전혀 관련이 없으므로 모든 클래스 수준의 주석을 삭제할 수 있습니다. Mockito를 사용하여 모든 구성 요소를 모의하는 경우 스프링 부트를 시작할 필요가 없습니다. –

+0

아니면 Spring Boot Test 1.4에서'@ MockBean'을 사용하려고했습니다 ... 이것은 완전히 다른 것입니다. –

답변

0

모든 코드를 복사하여 디버그 할 수 없기 때문에 정확하게 말하기는 어렵지만 모의를 올바르게 초기화하지 않았다고 생각합니다. (이

@RunWith 대신

@Before 
public void setup() { 
    MockitoAnnotations.initMocks(this); 
} 
+0

코드에이 방법이 있습니다 ... 붙여 넣기를 잊었습니다 .... 추가했습니다. –

0

(SpringRunner.class) @SpringBootTest (webEnvironment = WebEnvironment.RANDOM_PORT)

사용이 @RunWith을 MockitoJUnitRunner.class를 다음 수단을 추가 시도)

0

Mockito가 전달하는 ID에 대한 자원을 찾지 못하면 자동으로 ResourceNotFoundException이 표시됩니다.

Mockito.when(memberRepository.findOne(memberId)).thenReturn(member); 라인에 언급 된 memberId에 대해 작성 중이므로 특정 member이 반환되어야합니다.

그러나 실제로는 member 개체가 해당 메서드가 아니므로 Mockito는 ResourceNotFoundException을 throw합니다.

@Test(expected = ResourceNotFoundException.class)을 사용해야합니다.