エンドポイント(現在はローカル)に対してテストを実行する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);
}
Mockitoを使用して、サービスを呼び出すクライアントのモックを作成します。 – duffymo
私たちはテストを通してアプリケーションのエンドポイントにヒットしました。テスト中に擬似クライアントを注入する方法と、アプリケーションの目的で実際のクライアントを注入する方法については、あまりよく分かりません。 – Diva
私は、テスト時にスプリング注入モックを持っていません。私はJUnitテストを書いて、注入を手動で行う。そこに春の必要はありません。 – duffymo