Yürütülecek bir veritabanına gereksinim duyan bir dizi sınama var. Veritabanını yürütme başlangıcında oluşturmak ve sonunda kaldırmak istiyorum.
Ayrıca maven-surefire-eklentisine bir RunListener ekledim ve iyi çalışıyor. Ayrıca, ismaven adında bir sistem özelliği değişkeni ekledim. Testi maven'den çalıştırdığımda, bu değişken başlatılır, ancak Eclipse'deki testleri çalıştırdığımda, bu değişken sıfırdır (System.getProperty ile değişkene erişirim).
<configuration>
<properties>
<property>
<name>listener</name>
<value>com.mycompany.MyRunListener</value>
</property>
</properties>
<systemPropertyVariables>
<ismaven>true</ismaven>
</systemPropertyVariables>
</configuration>
Bütün veritabanı testleri @BeforeClass ve @AfterClass yöntemleri vardır bir sınıftan devralır. Bu yöntemler, testin Maven veya Eclipse tarafından ismaven özelliğinin değerini kontrol edip etmediğini kontrol eder. Test, maven tarafından gerçekleştiriliyorsa, ismaven özelliğinin bir değeri vardır ve her şeyi yaparlar. Ama deney, Eclipse tarafından yürütülen ismaven değişken null ve onlar (@AfterClass) veritabanı (@BeforeClass) başlatır veya durdurur ediliyor edilir:
@BeforeClass
public static void checkIfStartDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, start the database
if (ismaven == null) {
startDatabase();
}
}
@AfterClass
public static void checkIfStopDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, stop the database
if (ismaven == null) {
stopDatabase();
}
}
Bu çözüm% 100 çözmez senin problemi uygularsanız, Eclipse'i kullanarak bir JUnit sınıfının tüm testlerini yürütebilir (ve hata ayıklayabilirsiniz). Ayrıca, Maven kullanarak projenizin tüm testlerini daha önce bir kod parçası üzerinde yürüteceğiniz veya Tüm testlerin yapılmasından sonra.
Tam olarak neye baktığım tam olarak değil, çünkü kayıt için test uygulamasının karmaşıklığını artırmak istemiyorum. Testlerin dışına çıkmayı eklemek istedim, ama çözüm şu ana kadarki en iyi sonuç ve sonuçta istenen sonuç. Bu cevabı çözüm olarak işaretliyorum. –