2016-05-05 13 views
0

エンドポイント(現在はローカル)に対してテストを実行するSpringBootアプリケーションをテストする必要があります。スプリングブートアプリケーションの外部依存関係をどうやって模擬しますか?

サービスから外部サービス(s3)まで1回の呼び出しがあり、私たちはこのテストをs3へのライブコールをしないようにこれをモックする必要があります。

私は模擬にMockitoを使用します。

コールスタック:これは私のサービスである

@RestController 
@RequestMapping("/myjob") 
public class MyController{ 

    @Autowired 
    private MyService myService; 

    @RequestMapping(path = "/doJobInMyService", method = POST) 
    public void doJobInMyService(){ 
     myService.doMyJob() 
    } 

} 

:私のテストから

Controller -service 

        -external service. 

、私はちょうどエンドポイントURLをヒット(localhost:8080/actions/domyjob

は、これは私のコントローラです。

@Service 
public class MyService { 

    @Autowired 
    private s3Client AmazonS3Client; 

    doMyJob() { 
    s3Client.putObject(new PutObjectRequest()); 
} 
} 

もし私がlocalhost:8080/myjob/doJobInMyServiceを呼び出し、s3への外部呼び出しが行われないようにs3Client.putObject(new PutObjectRequest())をモックするだけで、フロー全体をテストしたいのなら、表示されます。

はこれを試みたが、私はまだ運ました:

@ActiveProfiles("MyTestConfig") 
@RunWith(SpringJUnit4ClassRunner.class) 
public class MyTest extends BaseTest { 
    @Autowired 
    private AmazonS3Client amazonS3Client; 

    @Test 
    public void testMyResponse() { 
     try { 
      Mockito.when(amazonS3Client.putObject(anyObject())).thenReturn(new PutObjectResult()); 
      assertNotNull(getMyClient().doMyJob()); 
     } catch(Exception e) { 

     } 
    } 
} 

@Profile("MyTestConfig") 
@Configuration 
public class MyTestConfiguration { 

    @Bean 
    @Primary 
    public AmazonS3Client amazonS3Client() { 
     return Mockito.mock(AmazonS3Client.class); 
    } 
+0

Mockitoを使用して、サービスを呼び出すクライアントのモックを作成します。 – duffymo

+0

私たちはテストを通してアプリケーションのエンドポイントにヒットしました。テスト中に擬似クライアントを注入する方法と、アプリケーションの目的で実際のクライアントを注入する方法については、あまりよく分かりません。 – Diva

+0

私は、テスト時にスプリング注入モックを持っていません。私はJUnitテストを書いて、注入を手動で行う。そこに春の必要はありません。 – duffymo

答えて

0

私はblog post on the topicを作成しません。また、Githubリポジトリへのリンクも含まれています。

このテストでは、元の春のビーン(例:s3Client)を偽のものに上書きするテスト設定を使用しています。このトリックには@Primary@Profileというアノテーションを使用できます。

+0

私は試みましたが、幸運はありませんでした。 – Diva

+0

あなたのウェブサイトにはSSL証明書のエラーがあります:( – Pete

+0

@Pete、より具体的に教えてください。 – luboskrnac

1

スプリングブート1.4.x以降、アノテーション@MockBeanでネイティブにサポートされているSpring beansのMockito Mockingがあります。詳細はthis section of Spring Boot docsを参照してください。

関連する問題