Développement de logiciels Google visible à partir des tests et Google Testing Blog Selon (http://testing.googleblog.com/2010/12/test-sizes.html), Google unifie les catégories de test des développeurs (jusque-là, test système, test EtoE, test UI, test Selenium, etc. Puisqu'il existe des expressions et qu'aucune d'elles ne définit clairement de quel type de test il s'agit), nous avons introduit le concept de TestSize et défini chacune comme suit.
S(Small)tester | M(Medium)tester | L(Large)tester | E(Enormous)tester | |
---|---|---|---|---|
Objectif temporel (pour chaque méthode) | Exécuter en moins de 100 ms | Exécuter en moins de 1 s | Courez aussi vite que possible | Courez aussi vite que possible |
Temps d'exécution maximum | Arrêt forcé de la cible de test S 1 minute après le démarrage | Arrêt forcé de la cible de test M 5 minutes après le démarrage | Arrêt forcé de la cible de test L 15 minutes après le démarrage | Terminer de force la cible de test E 1 heure après le démarrage |
Test S | Test M | Test L | Test E | |
---|---|---|---|---|
Service réseau (socket ouvert) | moquer | localhost uniquement | ○ | ○ |
Base de données | moquer | ○ | ○ | ○ |
Accès au système de fichiers | moquer | ○ | ○ | ○ |
Accès au système face à l'utilisateur | moquer | Non recommandé | ○ | ○ |
Exécution des appels système | × | Non recommandé | ○ | ○ |
Multithread | Non recommandé | ○ | ○ | ○ |
déclaration de sommeil | × | ○ | ○ | ○ |
Propriétés du système | × | ○ | ○ | ○ |
En définissant le moment d'exécution des tests pour chaque TestSize, le nombre de tests requis peut être exécuté dans la phase requise et un retour rapide peut être donné à l'utilisateur.
Par exemple, à la suite de l'article Cookpad, le timing d'exécution peut être divisé comme suit. Ce faisant, Cookpad peut exécuter le test par pull request dans les 5 minutes et donner des commentaires à l'utilisateur à un stade précoce.
Test S | Test M | Test L | Test E | |
---|---|---|---|---|
Moment d'exécution | Pour chaque pull request | Chaque pull request ou chaque fois qu'il est fusionné dans Master | Facultatif ou par version | Facultatif ou par version |
Alors, comment divisez-vous TestSize et son calendrier d'exécution? Ici, nous allons expliquer le cas de l'utilisation de Java et Maven.
À partir de JUnit 4.8, une annotation appelée Category a été ajoutée à JUnit, qui est un framework de test Java typique.
En marquant la méthode ou la classe à tester avec @ Category
, vous pouvez avoir un contrôle précis sur ce qui est exécuté à partir de la suite de tests.
Pour plus de détails, veuillez consulter cet article.
Définir une interface pour chaque TestSize
La cible d'exécution du test peut être contrôlée en passant l'interface définie à l'argument de @ Category
.
package hogehoge;
public interface Small {}
package hogehoge;
public interface Medium {}
public class hoge {
@Category(Small.class)
@Test
public void a() {
fail();
}
@Category(Medium.class)
@Test
public void b() {
fail();
}
}
Si TestSize peut être passé en paramètre lorsque Maven est exécuté, il est possible de diviser la synchronisation d'exécution par TestSize.
Si possible, ce serait bien de pouvoir le faire. Si TestSize n'est pas spécifié, tous les tests peuvent être exécutés et un ou plusieurs TestSize peuvent être spécifiés. Dans ce cas, le test TestSize spécifié est exécuté.
mvn test // All tests run.
mvn test -P Small // Small tests run.
mvn test -P Small,Medium // Small and medium tests run.
Les paramètres de Maven pour réaliser ce qui précède sont les suivants.
Spécifiez TestSize dans groups
de maven-surefire-plugin
.
Par défaut, vide est spécifié afin que tous les tests soient exécutés lorsqu'aucun argument n'est spécifié.
<project ...>
<properties>
<testcase.groups></testcase.groups>
</properties>
<profiles>
<profile>
<id>Small</id>
<properties>
<testcase.groups>hogehoge.Small</testcase.groups>
</properties>
</profile>
<profile>
<id>Medium</id>
<properties>
<testcase.groups>hogehoge.Medium</testcase.groups>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<argLine>-Dfile.encoding=UTF-8</argLine>
<groups>${testcase.groups}</groups>
</configuration>
</plugin>
</plugins>
</build>
</project>
Google, Cookpad a souvent écrit sur TestSize, mais je n'avais pas d'article sur la façon de le faire, alors je l'ai écrit. Je suis honoré d'être d'une quelconque aide.
Recommended Posts