2016-12-05 10 views
3

私はSpring Bootを使用していますが、テストを作成しようとしています。サービスレイヤメソッドテストが実行されているときに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

このような問題では難しいことが分かりますが、問題から最小、完全、および検証可能な例(http://stackoverflow.com/help/mcve)を作成する方法はありますか?それは本当に助けになるでしょう。 – entpnerd

+0

まず、テストコードはSpringとはまったく関係ないので、すべてのクラスレベルの注釈を削除することができます。Mockitoを使用してすべてのコンポーネントをモックする場合は、Spring起動を起動する必要はありません。 –

+0

あるいは、Spring Boot Test 1.4の '@ MockBean'を使うつもりです。これはまったく別のものです。 –

答えて

0

私はデバッグするコードをすべてコピー&ペーストできないので正確に言うのは難しいですが、モックを正しく初期化していないと思います。次のメソッドを追加してください:

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

私のコードでこのメソッドを持っていました...それを貼り付けるのを忘れました....私はそれを追加しました –

0

代わりにこの

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

この使用 @RunWith(MockitoJUnitRunner.class )

0

あなたが渡しているIdのリソースがMockitoに見つからない場合、自動的にResourceNotFoundExceptionがスローされます。

Mockito.when(memberRepository.findOne(memberId)).thenReturn(member);の行に記載されているmemberIdのために、特定のmemberが返されます。

実際には、memberオブジェクトを呼び出すときには、オブジェクトはそれらではないので、MockitoはResourceNotFoundExceptionをスローします。

@Test(expected = ResourceNotFoundException.class)を使用する必要があります。

関連する問題