J'ai écrit un code de test (Junit & mockit) pour le code qui appelle l'API AWS (Java)

Déclencheur

J'avais un programme pour vérifier l'état de la pile de CloudFormation sur AWS. Il est nécessaire de tester tous les statuts car le traitement est différent pour chaque statut renvoyé.

Tâche

Vous ne pouvez pas contrôler l'état de la pile AWS CloudFormation ici.

Comment le testez-vous?

Écrire le code de test dans Junit J'ai décidé de spécifier (simuler) le statut renvoyé par l'API.

La pièce que vous souhaitez tester

Ci-dessous la partie de code à tester

describeStacks.java


/*Création d'un client pour l'exécution de l'API CloudFormation*/
AmazonCloudFormationAsync CFclient = AmazonCloudFormationAsyncClientBuilder.standard()
		.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("hope", "huga")))
		.build();

/*DescribeStacks Spécifiez le nom de la pile cible*/
DescribeStacksRequest describeStacksRequest = new DescribeStacksRequest();
describeStacksRequest.withStackName("hogestack");

/*API pour obtenir le statut de la pile ici(describeStacks)(Où tu veux te moquer)*/
DescribeStacksResult describeStacksResult = CFclient.describeStacks(describeStacksRequest);

Railleur

describeStacksTest.java


@RunWith(MockitoJUnitRunner.class)
public class describeStacksTest {

    /*Déclarer la classe à se moquer*/
    @Mock AmazonCloudFormationAsync AmazonCloudFormationMock;
    /*Spécifiez la classe pour injecter la classe à simuler*/
    @InjectMocks describeStacksClass describeStacks = new describeStacksClass();

	@Before
	public void init() {
        /*Initialisation fictive*/
        MockitoAnnotations.initMocks(this);
	}
	@Test
public void Contrôle de l'état de la pile() {
        /*Créer une classe de valeurs de retour lorsque describeStacks est exécuté*/
		DescribeStacksResult describeStacksResult = new DescribeStacksResult();
		Stack stacks = new Stack();
		stacks.setStackStatus(StackStatus.CREATE_COMPLETE); //Définir StackStatus(Cette fois, CRÉER_Spécifiez le statut de COMPLETE)
		describeStacksResult.withStacks(stacks);

        /*Créer une classe avec les mêmes arguments que la cible de test exécute*/
		DescribeStacksRequest describeStacksRequest = new DescribeStacksRequest();
		describeStacksRequest.withStackName("hogestack");

        /*Spécifiez les arguments et la valeur de retour lors de l'exécution de describeStacks de la classe simulée*/
		when(AmazonCloudFormationMock.describeStacks(DescribeStacksRequest)).thenReturn(describeStacksResult);

Impressions

Puisque la classe AmazonCloudFormationAsync était publique, elle était facilement moquée. Puisqu'il s'agit d'une classe fournie en tant qu'API, il était facile de se moquer car elle était publique. Il est vrai que la classe Resule est également facile à configurer (vous attendez-vous à ce qu'AWS soit moquée et têtue?) Je pense que d'autres API peuvent être testées de la même manière.

Recommended Posts

J'ai écrit un code de test (Junit & mockit) pour le code qui appelle l'API AWS (Java)
J'ai étudié Randoop, un générateur de classe de test JUnit pour Java.
J'ai écrit un programme de jugement des nombres premiers en Java
[RSpec] J'ai écrit un test pour télécharger une image de profil.
J'ai créé un Wrapper qui appelle KNP depuis Java
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant
J'ai réussi le test Java niveau 2, je vais donc laisser une note
J'ai écrit une sorte de livre qui ressemble à Java
Une histoire que j'ai finalement comprise Java pour une déclaration en tant que non-ingénieur
Comment gérer le type auquel j'ai pensé en écrivant un programme Java pendant 2 ans
Je voulais écrire un processus équivalent à une instruction while avec l'API Java 8 Stream
[AWS SDK for Java] Définir la stratégie de nouvelle tentative pour le client S3
Quand j'ai voulu créer une méthode pour Premium Friday, c'était déjà dans l'API standard Java 8
J'ai créé un programme qui recherche la classe cible à partir du processus surchargé avec Java
03. J'ai envoyé une demande de Spring Boot à l'API de recherche de code postal
J'ai créé un client API THETA qui peut être utilisé pour le développement de plugins
Code pour supprimer tous les fichiers du préfixe spécifié dans AWS S3 (Java)
J'ai recherché un framework léger qui répondrait au soudain "faites-le vite"
J'ai créé un outil Diff pour les fichiers Java
J'ai créé un programme de jugement des nombres premiers en Java
[Java] Comment tester s'il est nul dans JUnit
ChatWork4j pour l'utilisation de l'API ChatWork en Java
[API] J'ai essayé d'utiliser l'API de recherche par code postal
J'ai créé Code Pipeline avec AWS CDK.
J'ai écrit un programme de factorisation prime en Java
Générer du code client Java pour l'API SOAP de SalesForce
Configurer des cookies signés (pour CloudFront) avec des stratégies personnalisées à l'aide du kit AWS SDK pour Java
Rêver de créer facilement une API Web pour la base de données d'un système Java existant
J'ai créé un outil de vérification pour le module de version
J'ai lu le code lisible, alors prends note
Remarque sur l'initialisation des champs dans le didacticiel Java
[Swift] API utilisée pour les applications qui ont réussi la sélection
J'ai écrit un diagramme de séquence de l'exemple j.u.c.Flow
Informations d'identification référencées par le kit AWS SDK for Java par défaut
Je veux écrire une boucle qui fait référence à un index avec l'API Stream de Java 8
Implémentation d'une API forte pour "Je veux afficher ~~ à l'écran" avec un simple CQRS
[Java] J'ai essayé de créer un jeu Janken que les débutants peuvent exécuter sur la console
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 4): une fonction qui rend l'utilisateur unique
J'ai essayé de créer un programme en Java qui résout le problème du voyageur de commerce avec un algorithme génétique