J'ai une exigence pour tester une application SpringBoot où j'exécute les tests par rapport au point final (pour l'instant, localement).Comment vous moquez-vous des dépendances externes dans l'application de démarrage de printemps?
Il y a un appel d'un service au service externe (s3
), et j'ai juste besoin de simuler ceci, de sorte que nous ne faisons pas un appel en direct à s3
de notre test. J'utilise Mockito pour les moqueurs.
La pile d'appel:
Controller -service
-external service.
De mon test, je viens de frapper le point final url (localhost:8080/actions/domyjob
)
Ceci est mon contrôleur:
@RestController
@RequestMapping("/myjob")
public class MyController{
@Autowired
private MyService myService;
@RequestMapping(path = "/doJobInMyService", method = POST)
public void doJobInMyService(){
myService.doMyJob()
}
}
Ceci est mon service:
@Service
public class MyService {
@Autowired
private s3Client AmazonS3Client;
doMyJob() {
s3Client.putObject(new PutObjectRequest());
}
}
Si vous voyez, si je veux tester l'ensemble du flux, en appelant localhost:8080/myjob/doJobInMyService
et juste simuler s3Client.putObject(new PutObjectRequest())
, de sorte que les appels externes à s3
ne soit pas fait.
ai essayé, mais je n'avais toujours pas de chance:
@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);
}
Utilisez Mockito pour créer une simulation du client qui appelle le service. – duffymo
Nous venons de frapper le point de terminaison de l'application grâce à des tests. Pas vraiment sûr comment le printemps injecterait le client moqué pendant le test et le client réel à des fins d'application. – Diva
Je n'ai pas de ressort injecter des mocks quand je teste. J'écris des tests JUnit et je fais l'injection manuellement en utilisant l'injection de ctor. Pas besoin de printemps là-bas. – duffymo