Bei der Implementierung von E2E-Tests mit JUnit im Test Runner habe ich die Testklasse für jeden Bildschirm und jede API aufgeteilt. Zu diesem Zeitpunkt habe ich darüber nachgedacht, wie eine Testmethode definiert werden kann, die mehreren Testklassen gemeinsam ist.
Durch Definieren einer gemeinsamen Testmethode in der übergeordneten Klasse der Testklasse wird die Testmethode der übergeordneten Klasse auch ausgeführt, wenn jede Testklasse ausgeführt wird.
Das Verhalten, das jeder Testklasse eigen ist, wird als Schnittstelle (oder abstrakte Methode der übergeordneten Klasse) definiert, und die allgemeine Testmethode verwendet diese Schnittstelle, um den Test zu implementieren.
public abstract class CommonTestA {
//Eine abstrakte Methode zum Definieren eines für eine Testklasse spezifischen Verhaltens
abstract SomeObject doSomething();
@Test
public void commonTestX() {
// doSomething()So implementieren Sie einen allgemeinen Testfall mit
}
}
//CommonTest beim Ausführen dieser Testklasse.commonTestX()Wird auch ausgeführt
public class TestClass extends CommonTestA {
//Implementieren Sie Testfälle, die für die Testklasse spezifisch sind
}
Mit dieser Methode kann eine Testklasse aufgrund von Java-Vererbungsbeschränkungen nur eine gemeinsame Testklasse erben. Dies ist ein Problem, wenn Sie mehrere gemeinsame Testklassen erstellen möchten.
Problem (1) kann vermieden werden, indem die in Java 8 eingeführte Standardmethode der Schnittstelle verwendet wird. (Da mehrere Schnittstellen in einer Klasse implementiert werden können.) In JUnit 4 und früheren Versionen wird die Standardmethode jedoch nicht in der Implementierungsklasse ausgeführt, sodass JUnit 5 verwendet werden muss.
public interface CommonTestA {
SomeObject doSomething();
@Test
default void commonTestA() {
//Definieren Sie eine allgemeine Testmethode als Standardmethode
}
}
//In einer Testklasse können mehrere gemeinsame Testschnittstellen implementiert werden
public class TestClassX implements CommonTestA, ComonTestB {
// ...
}
Recommended Posts