JUnit - Hızlı Kılavuz
Test, bir uygulamanın gereksinimlere göre çalıştığından emin olmak için işlevselliğini kontrol etme sürecidir. Birim testi, geliştirici düzeyinde resme gelir; tek bir varlığın (sınıf veya yöntem) test edilmesidir. Birim testi, bir yazılım şirketinin müşterilerine kaliteli ürünler sunmasına yardımcı olmada kritik bir rol oynar.
Birim testi iki şekilde yapılabilir - manuel test ve otomatik test.
Manuel Test | Otomatik Test |
---|---|
Herhangi bir araç desteği olmadan manuel olarak test senaryosu yürütmek, manuel test olarak bilinir. | Araç desteğini almak ve bir otomasyon aracı kullanarak test olaylarını yürütmek, otomasyon testi olarak bilinir. |
Time-consuming and tedious - Test senaryoları insan kaynakları tarafından yürütüldüğü için çok yavaş ve yorucudur. | Fast - Otomasyon, test durumlarını insan kaynaklarından önemli ölçüde daha hızlı çalıştırır. |
Huge investment in human resources - Test senaryolarının manuel olarak yürütülmesi gerektiğinden, manuel testte daha fazla test uzmanına ihtiyaç vardır. | Less investment in human resources - Test senaryoları, otomasyon araçları kullanılarak yürütülür, bu nedenle otomasyon testinde daha az sayıda test görevlisi gerekir. |
Less reliable - İnsan hatalarını hesaba katması gerektiğinden, manuel test daha az güvenilirdir. | More reliable - Otomasyon testleri kesin ve güvenilirdir. |
Non-programmable - Gizli bilgileri almak için sofistike testler yazmak için programlama yapılamaz. | Programmable - Test uzmanları, gizli bilgileri ortaya çıkarmak için karmaşık testler programlayabilir. |
JUnit nedir?
JUnit, Java programlama dili için bir birim test çerçevesidir. Test odaklı geliştirmede çok önemli bir rol oynar ve topluca xUnit olarak bilinen bir birim test çerçevesi ailesidir.
JUnit, önce test edilebilecek ve sonra uygulanabilecek bir kod parçası için test verilerini ayarlamayı vurgulayan "önce test sonra kodlama" fikrini teşvik eder. Bu yaklaşım "biraz test edin, biraz kodlayın, biraz test edin, biraz kodlayın" gibidir. Programcının üretkenliğini ve program kodunun kararlılığını artırır, bu da programcı üzerindeki stresi ve hata ayıklamaya harcanan zamanı azaltır.
JUnit'in Özellikleri
JUnit, testleri yazmak ve çalıştırmak için kullanılan açık kaynaklı bir çerçevedir.
Test yöntemlerini tanımlamak için ek açıklamalar sağlar.
Beklenen sonuçları test etmek için iddialar sağlar.
Testleri çalıştırmak için test çalıştırıcıları sağlar.
JUnit testleri, kodları daha hızlı yazmanıza olanak tanır ve bu da kaliteyi artırır.
JUnit zarif ve basittir. Daha az karmaşıktır ve daha az zaman alır.
JUnit testleri otomatik olarak çalıştırılabilir ve kendi sonuçlarını kontrol eder ve anında geri bildirim sağlar. Test sonuçları raporunu manuel olarak taramanıza gerek yoktur.
JUnit testleri, test senaryolarını ve hatta diğer test setlerini içeren test paketleri halinde organize edilebilir.
JUnit, test sorunsuz çalışıyorsa yeşil olan bir çubukta test ilerlemesini gösterir ve bir test başarısız olduğunda kırmızıya döner.
Birim Test Vakası nedir?
Birim Test Vakası, kodun başka bir bölümünün (yöntem) beklendiği gibi çalışmasını sağlayan bir kod parçasıdır. İstenilen sonuçlara hızlı bir şekilde ulaşmak için bir test çerçevesi gereklidir. JUnit, Java programlama dili için mükemmel bir birim test çerçevesidir.
Resmi bir yazılı birim test senaryosu, bilinen bir girdi ve beklenen bir çıktı ile karakterize edilir ve test yürütülmeden önce üzerinde çalışılır. Bilinen girdi bir ön koşulu test etmeli ve beklenen çıktı bir son koşulu test etmelidir.
Her gereksinim için en az iki birim test senaryosu olmalıdır - bir pozitif test ve bir negatif test. Bir gereksinimin alt gereksinimleri varsa, her alt gereksinim, pozitif ve negatif olmak üzere en az iki test durumuna sahip olmalıdır.
Yerel Ortam Kurulumu
JUnit, Java için bir çerçevedir, bu nedenle ilk gereksinim, makinenizde JDK'nın kurulu olmasıdır.
Sistem gereksinimleri
JDK | 1.5 veya üstü. |
---|---|
Hafıza | Minimum gereklilik yok. |
Disk alanı | Minimum gereklilik yok. |
İşletim sistemi | Minimum gereklilik yok. |
Adım 1: Makinenizde Java Kurulumunu Doğrulayın
Öncelikle konsolu açın ve üzerinde çalıştığınız işletim sistemine göre bir java komutu yürütün.
işletim sistemi | Görev | Komut |
---|---|---|
pencereler | Komut Konsolunu Aç | c: \> java sürümü |
Linux | Komut Terminalini Aç | $ java sürümü |
Mac | Açık Terminal | makine: ~ joseph $ java -version |
Tüm işletim sistemleri için çıktıyı doğrulayalım -
işletim sistemi | Çıktı |
---|---|
pencereler | java sürümü "1.8.0_101" Java (TM) SE Çalışma Zamanı Ortamı (derleme 1.8.0_101) |
Linux | java sürümü "1.8.0_101" Java (TM) SE Çalışma Zamanı Ortamı (derleme 1.8.0_101) |
Mac | java sürümü "1.8.0_101" Java (TM) SE Çalışma Zamanı Ortamı (derleme 1.8.0_101) |
Sisteminizde Java yüklü değilse, aşağıdaki bağlantıdan Java Yazılım Geliştirme Kitini (SDK) indirin https://www.oracle.com. Bu eğitim için Java 1.8.0_101 sürümünü yüklü sürüm olarak kabul ediyoruz.
Adım 2: JAVA Ortamını Ayarlayın
Yı kur JAVA_HOMEJava'nın makinenizde kurulu olduğu temel dizin konumunu gösteren ortam değişkeni. Örneğin.
işletim sistemi | Çıktı |
---|---|
pencereler | JAVA_HOME ortam değişkenini C: \ Program Files \ Java \ jdk1.8.0_101 olarak ayarlayın |
Linux | dışa aktar JAVA_HOME = / usr / local / java-current |
Mac | dışa aktar JAVA_HOME = / Kitaplık / Java / Ana Sayfa |
Java derleyici konumunu Sistem Yoluna ekleyin.
işletim sistemi | Çıktı |
---|---|
pencereler | Dizeyi ekleyin C:\Program Files\Java\jdk1.8.0_101\bin sistem değişkeninin sonunda, Path. |
Linux | dışa aktarma PATH = $PATH:$JAVA_HOME / bin / |
Mac | gerekli değil |
Komutu kullanarak Java kurulumunu doğrulayın java -version yukarıda açıklandığı gibi.
3. Adım: JUnit Arşivini İndirin
JUnit jar dosyasının en son sürümünü şuradan indirin: http://www.junit.org. Bu öğreticiyi yazarken Junit-4.12.jar dosyasını indirdik ve C: \> JUnit klasörüne kopyaladık.
işletim sistemi | Arşiv adı |
---|---|
pencereler | junit4.12.jar |
Linux | junit4.12.jar |
Mac | junit4.12.jar |
Adım 4: JUnit Ortamını Ayarlayın
Yı kur JUNIT_HOMEJUNIT jar'ın makinenizde depolandığı temel dizin konumunu gösteren ortam değişkeni. Junit4.12.jar dosyasını JUNIT klasöründe sakladığımızı varsayalım.
Sr.No | İşletim Sistemi ve Açıklama |
---|---|
1 | Windows JUNIT_HOME ortam değişkenini C: \ JUNIT olarak ayarlayın |
2 | Linux JUNIT_HOME = / usr / local / JUNIT dışa aktar |
3 | Mac dışa aktar JUNIT_HOME = / Kitaplık / JUNIT |
Adım 5: CLASSPATH Değişkenini Ayarlayın
Yı kur CLASSPATH JUNIT akü konumunu işaret etmek için ortam değişkeni.
Sr.No | İşletim Sistemi ve Açıklama |
---|---|
1 | Windows CLASSPATH ortam değişkenini% CLASSPATH%;% JUNIT_HOME% \ junit4.12.jar;.; |
2 | Linux dışa aktar CLASSPATH = $CLASSPATH:$JUNIT_HOME / junit4.12.jar :. |
3 | Mac dışa aktar CLASSPATH = $CLASSPATH:$JUNIT_HOME / junit4.12.jar :. |
Adım 6: JUnit Kurulumunu Test Edin
TestJunit adında bir java sınıfı dosya oluşturun C:\>JUNIT_WORKSPACE
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
@Test
public void testAdd() {
String str = "Junit is working fine";
assertEquals("Junit is working fine",str);
}
}
TestRunner adında bir java sınıfı dosya oluşturun C:\>JUNIT_WORKSPACE test senaryolarını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
7. Adım: Sonucu Doğrulayın
Kullanarak sınıfları derleyin javac aşağıdaki gibi derleyici -
C:\JUNIT_WORKSPACE>javac TestJunit.java TestRunner.java
Şimdi sonucu aşağıdaki gibi görmek için Test Çalıştırıcısını çalıştırın -
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın.
true
JUnit bir Regression Testing Frameworkgeliştiriciler tarafından Java'da birim testi uygulamak ve programlama hızını artırmak ve kod kalitesini artırmak için kullanılır. JUnit Framework aşağıdakilerden biriyle kolayca entegre edilebilir -
- Eclipse
- Ant
- Maven
JUnit Test Çerçevesinin Özellikleri
JUnit test çerçevesi aşağıdaki önemli özellikleri sağlar -
- Fixtures
- Test paketleri
- Test koşucuları
- JUnit sınıfları
Fikstür
Fixturestestleri çalıştırmak için temel olarak kullanılan bir dizi nesnenin sabit durumudur. Bir test fikstürünün amacı, sonuçların tekrarlanabilir olması için testlerin yürütüldüğü iyi bilinen ve sabit bir ortamın olmasını sağlamaktır. İçerir -
- setUp () yöntemi, her test çağrısından önce çalışır.
- Her test yönteminden sonra çalışan tearDown () yöntemi.
Bir örneğe bakalım -
import junit.framework.*;
public class JavaTest extends TestCase {
protected int value1, value2;
// assigning the values
protected void setUp(){
value1 = 3;
value2 = 3;
}
// test method to add two values
public void testAdd(){
double result = value1 + value2;
assertTrue(result == 6);
}
}
Test Takımları
Bir test paketi birkaç birim test durumunu bir araya getirir ve birlikte çalıştırır. JUnit'te, süit testini çalıştırmak için hem @RunWith hem de @Suite ek açıklaması kullanılır. Aşağıda, TestJunit1 ve TestJunit2 test sınıflarını kullanan bir örnek verilmiştir.
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
//JUnit Suite Test
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestJunit1.class ,TestJunit2.class
})
public class JunitTestSuite {
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit1 {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
assertEquals(message, messageUtil.printMessage());
}
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit2 {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Test Koşucuları
Test çalıştırıcısı, test senaryolarını yürütmek için kullanılır. İşte test sınıfını varsayan bir örnekTestJunit zaten var.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
JUnit Sınıfları
JUnit sınıfları, JUnitlerin yazılması ve test edilmesinde kullanılan önemli sınıflardır. Önemli sınıflardan bazıları -
Assert - Bir dizi iddia yöntemi içerir.
TestCase - Fikstürü birden çok test yürütmek için tanımlayan bir test senaryosu içerir.
TestResult - Bir test senaryosu yürütmenin sonuçlarını toplamak için yöntemler içerir.
Şimdi JUnit kullanma sürecini adım adım göstermek için temel bir örneğe sahip olalım.
Bir Sınıf Oluşturun
Test edilecek bir java sınıfı oluşturun, örneğin MessageUtil.java içinde C:\>JUNIT_WORKSPACE
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
}
Test Vaka Sınıfı Oluşturun
- TestJunit.java gibi bir java test sınıfı oluşturun.
- Test sınıfınıza bir test yöntemi testPrintMessage () ekleyin.
- TestPrintMessage () yöntemine bir @Test Notu ekleyin.
- Test koşulunu uygulayın ve JUnit'in assertEquals API'sini kullanarak koşulu kontrol edin.
TestJunit.java adlı bir java sınıfı dosya adı oluşturun C:\>JUNIT_WORKSPACE.
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Hello World";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
assertEquals(message,messageUtil.printMessage());
}
}
Test Runner Sınıfı Oluşturun
- Bir TestRunner java sınıfı oluşturun.
- Yukarıda oluşturulan test sınıfının test durumunu çalıştırmak için JUnit'in JUnitCore sınıfının runClasses yöntemini kullanın.
- Sonuç Nesnesinde çalıştırılan test senaryolarının sonucunu alın.
- Result nesnesinin getFailures () yöntemini kullanarak hataları alın.
- Result nesnesinin wasSuccessful () yöntemini kullanarak Başarı sonucunu alın.
TestRunner.java adlı bir java sınıf dosyası oluşturun. C:\>JUNIT_WORKSPACE test senaryolarını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Javac kullanarak MessageUtil, Test case ve Test Runner sınıflarını derleyin.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java
Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın.
Hello World
true
Şimdi TestJunit'i güncelleyin C:\>JUNIT_WORKSPACEböylece test başarısız olur. Mesaj dizisini değiştirin.
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Hello World";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
message = "New Word";
assertEquals(message,messageUtil.printMessage());
}
}
Geri kalan sınıfları olduğu gibi tutalım ve aynı Test Runner'ı çalıştırmayı deneyelim.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın.
Hello World
testPrintMessage(TestJunit): expected:<[New Wor]d> but was:<[Hello Worl]d>
false
JUnit'teki en önemli paket junit.framework, tüm çekirdek sınıfları içeren. Önemli sınıflardan bazıları aşağıdaki gibidir -
Sr.No. | Sınıf adı | İşlevsellik |
---|---|---|
1 | İddia | Bir dizi iddia yöntemi. |
2 | Test durumu | Bir test senaryosu, fikstürü birden fazla test yapacak şekilde tanımlar. |
3 | Test sonucu | Bir TestResult, bir test olayının yürütülmesinin sonuçlarını toplar. |
4 | Test odası | Bir TestSuite, testlerin bir bileşimidir. |
Assert Sınıfı
Aşağıdaki beyanı org.junit.Assert sınıf -
public class Assert extends java.lang.Object
Bu sınıf, test yazmak için yararlı olan bir dizi onaylama yöntemi sağlar. Yalnızca başarısız iddialar kaydedilir. Assert sınıfının önemli yöntemlerinden bazıları aşağıdaki gibidir -
Sr.No. | Yöntemler ve Açıklama |
---|---|
1 | void assertEquals(boolean expected, boolean actual) İki temel öğenin / nesnenin eşit olduğunu kontrol eder. |
2 | void assertFalse(boolean condition) Bir koşulun yanlış olup olmadığını kontrol eder. |
3 | void assertNotNull(Object object) Bir nesnenin boş olmadığını kontrol eder. |
4 | void assertNull(Object object) Bir nesnenin boş olup olmadığını kontrol eder. |
5 | void assertTrue(boolean condition) Bir koşulun doğru olup olmadığını kontrol eder. |
6 | void fail() Mesaj içermeyen bir testi geçemez. |
Yukarıdaki yöntemlerden bazılarını bir örnekte kullanalım. TestJunit1.java adlı bir java sınıf dosyası oluşturun.C:\>JUNIT_WORKSPACE.
import org.junit.Test;
import static org.junit.Assert.*;
public class TestJunit1 {
@Test
public void testAdd() {
//test data
int num = 5;
String temp = null;
String str = "Junit is working fine";
//check for equality
assertEquals("Junit is working fine", str);
//check for false condition
assertFalse(num > 6);
//check for not null value
assertNotNull(temp);
}
}
Ardından, adında bir java sınıf dosyası oluşturun TestRunner1.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner1 {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit1.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Javac kullanarak test durumunu ve Test Runner sınıflarını derleyin.
C:\JUNIT_WORKSPACE>javac TestJunit1.java TestRunner1.java
Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner1
Çıkışı doğrulayın.
true
TestCase Sınıfı
Aşağıdaki beyanı org.junit.TestCase sınıf -
public abstract class TestCase extends Assert implements Test
Bir test senaryosu, fikstürü birden fazla test yapacak şekilde tanımlar. Önemli yöntemlerden bazılarıTestCase sınıf aşağıdaki gibidir -
Sr.No. | Yöntemler ve Açıklama |
---|---|
1 | int countTestCases() Çalıştırma tarafından yürütülen test olaylarının sayısını sayar (TestResult sonucu). |
2 | TestResult createResult() Varsayılan bir TestResult nesnesi oluşturur. |
3 | String getName() Bir TestCase'in adını alır. |
4 | TestResult run() Sonuçları varsayılan bir TestResult nesnesiyle toplayarak bu testi çalıştırmak için kullanışlı bir yöntem. |
5 | void run(TestResult result) Test durumunu çalıştırır ve sonuçları TestResult'ta toplar. |
6 | void setName(String name) Bir TestCase'in adını ayarlar. |
7 | void setUp() Fikstürü kurar, örneğin bir ağ bağlantısı açar. |
8 | void tearDown() Armatürü yırtıp atın, örneğin bir ağ bağlantısını kapatın. |
9 | String toString() Test olayının dize olarak temsilini döndürür. |
Yukarıdaki yöntemlerden bazılarını bir örnekte kullanalım. Adlı bir java sınıf dosyası oluşturunTestJunit2.java C: \> JUNIT_WORKSPACE konumunda.
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
public class TestJunit2 extends TestCase {
protected double fValue1;
protected double fValue2;
@Before
public void setUp() {
fValue1 = 2.0;
fValue2 = 3.0;
}
@Test
public void testAdd() {
//count the number of test cases
System.out.println("No of Test Case = "+ this.countTestCases());
//test getName
String name = this.getName();
System.out.println("Test Case Name = "+ name);
//test setName
this.setName("testNewAdd");
String newName = this.getName();
System.out.println("Updated Test Case Name = "+ newName);
}
//tearDown used to close the connection or clean up activities
public void tearDown( ) {
}
}
Ardından, adında bir java sınıf dosyası oluşturun TestRunner2.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner2 {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit2.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Javac kullanarak test durumunu ve Test Runner sınıflarını derleyin.
C:\JUNIT_WORKSPACE>javac TestJunit2.java TestRunner2.java
Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner2
Çıkışı doğrulayın.
No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
true
TestResult Sınıfı
Aşağıdaki beyanı org.junit.TestResult sınıf -
public class TestResult extends Object
Bir TestResult, bir test olayının yürütülmesinin sonuçlarını toplar. Toplama Parametresi modelinin bir örneğidir. Test çerçevesi, hataları ve hataları birbirinden ayırır. Bir arıza tahmin edilir ve iddialarla kontrol edilir. Hatalar, ArrayIndexOutOfBoundsException gibi beklenmeyen sorunlardır. Önemli yöntemlerden bazılarıTestResult sınıf aşağıdaki gibidir -
Sr.No. | Yöntemler ve Açıklama |
---|---|
1 | void addError(Test test, Throwable t) Hata listesine bir hata ekler. |
2 | void addFailure(Test test, AssertionFailedError t) Arıza listesine bir arıza ekler. |
3 | void endTest(Test test) Sonucu bir testin tamamlandığını bildirir. |
4 | int errorCount() Tespit edilen hataların sayısını alır. |
5 | Enumeration<TestFailure> errors() Hatalar için bir Numaralandırma döndürür. |
6 | int failureCount() Tespit edilen başarısızlıkların sayısını alır. |
7 | void run(TestCase test) Bir TestCase çalıştırır. |
8 | int runCount() Çalıştırma testlerinin sayısını alır. |
9 | void startTest(Test test) Sonucu bir testin başlatılacağı konusunda bilgilendirir. |
10 | void stop() Test çalıştırmasının durması gerektiğini belirtir. |
Adlı bir java sınıf dosyası oluşturun TestJunit3.java C: \> JUNIT_WORKSPACE konumunda.
import org.junit.Test;
import junit.framework.AssertionFailedError;
import junit.framework.TestResult;
public class TestJunit3 extends TestResult {
// add the error
public synchronized void addError(Test test, Throwable t) {
super.addError((junit.framework.Test) test, t);
}
// add the failure
public synchronized void addFailure(Test test, AssertionFailedError t) {
super.addFailure((junit.framework.Test) test, t);
}
@Test
public void testAdd() {
// add any test
}
// Marks that the test run should stop.
public synchronized void stop() {
//stop the test here
}
}
Ardından, adında bir java sınıf dosyası oluşturun TestRunner3.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner3 {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit3.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Javac kullanarak test durumunu ve Test Runner sınıflarını derleyin.
C:\JUNIT_WORKSPACE>javac TestJunit3.java TestRunner3.java
Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner3
Çıkışı doğrulayın.
true
TestSuite Sınıfı
Aşağıdaki beyanı org.junit.TestSuite sınıf:
public class TestSuite extends Object implements Test
TestSuite, testlerin bir Bileşimidir. Bir dizi test senaryosu çalıştırır. Önemli yöntemlerden bazılarıTestSuite sınıf aşağıdaki gibidir -
Sr.No. | Yöntemler ve Açıklama |
---|---|
1 | void addTest(Test test) Pakete bir test ekler. |
2 | void addTestSuite(Class<? extends TestCase> testClass) Verilen sınıftaki testleri süite ekler. |
3 | int countTestCases() Bu test tarafından çalıştırılacak test senaryolarının sayısını sayar. |
4 | String getName() Paketin adını verir. |
5 | void run(TestResult result) Testleri çalıştırır ve sonuçlarını bir TestResult'ta toplar. |
6 | void setName(String name) Paketin adını ayarlar. |
7 | Test testAt(int index) Verilen dizindeki testi döndürür. |
8 | int testCount() Bu paketteki testlerin sayısını döndürür. |
9 | static Test warning(String message) Başarısız olacak ve bir uyarı mesajı kaydedecek bir test döndürür. |
Adlı bir java sınıf dosyası oluşturun JunitTestSuite.java C: \> JUNIT_WORKSPACE içinde Test paketi oluşturmak için.
import junit.framework.*;
public class JunitTestSuite {
public static void main(String[] a) {
// add the test's in the suite
TestSuite suite = new TestSuite(TestJunit1.class, TestJunit2.class, TestJunit3.class );
TestResult result = new TestResult();
suite.run(result);
System.out.println("Number of test cases = " + result.runCount());
}
}
Javac kullanarak Test paketi sınıflarını derleyin.
C:\JUNIT_WORKSPACE>javac JunitTestSuite.java
Şimdi Test Suite'i çalıştırın.
C:\JUNIT_WORKSPACE>java JunitTestSuite
Çıkışı doğrulayın.
No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
Number of test cases = 3
Burada, POJO sınıfı, İş mantığı sınıfı ve test çalıştırıcısı tarafından çalıştırılacak bir test sınıfı kullanılarak JUnit testinin eksiksiz bir örneğini göreceğiz.
Oluşturmak EmployeeDetails.java POJO sınıfı olan C: \> JUNIT_WORKSPACE içinde.
public class EmployeeDetails {
private String name;
private double monthlySalary;
private int age;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the monthlySalary
*/
public double getMonthlySalary() {
return monthlySalary;
}
/**
* @param monthlySalary the monthlySalary to set
*/
public void setMonthlySalary(double monthlySalary) {
this.monthlySalary = monthlySalary;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
}
EmployeeDetails sınıf kullanılır -
- çalışanın adının değerini alın / ayarlayın.
- çalışanın aylık maaşının değerini alın / ayarlayın.
- çalışanın yaşının değerini öğrenin / ayarlayın.
Adlı bir dosya oluşturun EmpBusinessLogic.java iş mantığını içeren C: \> JUNIT_WORKSPACE içinde.
public class EmpBusinessLogic {
// Calculate the yearly salary of employee
public double calculateYearlySalary(EmployeeDetails employeeDetails) {
double yearlySalary = 0;
yearlySalary = employeeDetails.getMonthlySalary() * 12;
return yearlySalary;
}
// Calculate the appraisal amount of employee
public double calculateAppraisal(EmployeeDetails employeeDetails) {
double appraisal = 0;
if(employeeDetails.getMonthlySalary() < 10000){
appraisal = 500;
}else{
appraisal = 1000;
}
return appraisal;
}
}
EmpBusinessLogic sınıf hesaplamak için kullanılır -
- bir çalışanın yıllık maaşı.
- bir çalışanın ekspertiz tutarı.
Adlı bir dosya oluşturun TestEmployeeDetails.java test edilecek test senaryolarını içeren C: \> JUNIT_WORKSPACE içinde.
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestEmployeeDetails {
EmpBusinessLogic empBusinessLogic = new EmpBusinessLogic();
EmployeeDetails employee = new EmployeeDetails();
//test to check appraisal
@Test
public void testCalculateAppriasal() {
employee.setName("Rajeev");
employee.setAge(25);
employee.setMonthlySalary(8000);
double appraisal = empBusinessLogic.calculateAppraisal(employee);
assertEquals(500, appraisal, 0.0);
}
// test to check yearly salary
@Test
public void testCalculateYearlySalary() {
employee.setName("Rajeev");
employee.setAge(25);
employee.setMonthlySalary(8000);
double salary = empBusinessLogic.calculateYearlySalary(employee);
assertEquals(96000, salary, 0.0);
}
}
TestEmployeeDetails sınıfı, yöntemlerini test etmek için kullanılır EmpBusinessLogicsınıf. O
- çalışanın yıllık maaşını test eder.
- çalışanın ekspertiz tutarını test eder.
Ardından, adlı dosyalanmış bir java sınıfı oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestEmployeeDetails.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Javac kullanarak test durumunu ve Test Runner sınıflarını derleyin.
C:\JUNIT_WORKSPACE>javac EmployeeDetails.java
EmpBusinessLogic.java TestEmployeeDetails.java TestRunner.java
Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın.
true
İddia
Tüm iddialar Assert sınıfındadır.
public class Assert extends java.lang.Object
Bu sınıf, test yazmak için yararlı olan bir dizi onaylama yöntemi sağlar. Yalnızca başarısız iddialar kaydedilir. Assert sınıfının önemli yöntemlerinden bazıları aşağıdaki gibidir -
Sr.No. | Yöntemler ve Açıklama |
---|---|
1 | void assertEquals(boolean expected, boolean actual) İki temel öğenin / nesnenin eşit olduğunu kontrol eder. |
2 | void assertTrue(boolean condition) Bir koşulun doğru olup olmadığını kontrol eder. |
3 | void assertFalse(boolean condition) Bir koşulun yanlış olup olmadığını kontrol eder. |
4 | void assertNotNull(Object object) Bir nesnenin boş olmadığını kontrol eder. |
5 | void assertNull(Object object) Bir nesnenin boş olup olmadığını kontrol eder. |
6 | void assertSame(object1, object2) AssertSame () yöntemi, iki nesne başvurusunun aynı nesneyi işaret edip etmediğini test eder. |
7 | void assertNotSame(object1, object2) AssertNotSame () yöntemi, iki nesne başvurusunun aynı nesneyi işaret edip etmediğini test eder. |
8 | void assertArrayEquals(expectedArray, resultArray); AssertArrayEquals () yöntemi, iki dizinin birbirine eşit olup olmadığını test eder. |
Yukarıdaki yöntemlerden bazılarını bir örnekte kullanalım. Adlı bir java sınıf dosyası oluşturunTestAssertions.java C: \> JUNIT_WORKSPACE konumunda.
import org.junit.Test;
import static org.junit.Assert.*;
public class TestAssertions {
@Test
public void testAssertions() {
//test data
String str1 = new String ("abc");
String str2 = new String ("abc");
String str3 = null;
String str4 = "abc";
String str5 = "abc";
int val1 = 5;
int val2 = 6;
String[] expectedArray = {"one", "two", "three"};
String[] resultArray = {"one", "two", "three"};
//Check that two objects are equal
assertEquals(str1, str2);
//Check that a condition is true
assertTrue (val1 < val2);
//Check that a condition is false
assertFalse(val1 > val2);
//Check that an object isn't null
assertNotNull(str1);
//Check that an object is null
assertNull(str3);
//Check if two object references point to the same object
assertSame(str4,str5);
//Check if two object references not point to the same object
assertNotSame(str1,str3);
//Check whether two arrays are equal to each other.
assertArrayEquals(expectedArray, resultArray);
}
}
Ardından, adında bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner2 {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestAssertions.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Test durumunu ve Test Runner sınıflarını javac kullanarak derleyin.
C:\JUNIT_WORKSPACE>javac TestAssertions.java TestRunner.java
Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın.
true
Ek açıklama
Ek açıklamalar, kodunuza ekleyebileceğiniz ve bunları yöntemlere veya sınıfta uygulayabileceğiniz meta etiketler gibidir. JUnit'teki bu ek açıklamalar, test yöntemleri hakkında aşağıdaki bilgileri sağlar -
- test yöntemlerinden önce ve sonra hangi yöntemlerin çalıştırılacağı.
- tüm yöntemlerden önce ve sonra hangi yöntemlerin çalıştığı ve.
- yürütme sırasında hangi yöntemlerin veya sınıfların yok sayılacağı.
Aşağıdaki tablo ek açıklamaların bir listesini ve bunların JUnit'teki anlamlarını sağlar -
Sr.No. | Ek Açıklama ve Açıklama |
---|---|
1 | @Test Test ek açıklaması JUnit'e eklendiği genel void yönteminin bir test senaryosu olarak çalıştırılabileceğini söyler. |
2 | @Before Birkaç testin çalıştırılmadan önce benzer nesnelerin oluşturulmasına ihtiyacı vardır. Bir genel void yöntemine @Before ile açıklama eklemek, bu yöntemin her Test yönteminden önce çalıştırılmasına neden olur. |
3 | @After Bir Before yönteminde harici kaynakları ayırırsanız, bunları test çalıştırdıktan sonra serbest bırakmanız gerekir. Genel bir void yöntemine @After ile açıklama eklemek, bu yöntemin Test yönteminden sonra çalıştırılmasına neden olur. |
4 | @BeforeClass @BeforeClass ile genel bir statik void yöntemine açıklama eklemek, bu yöntemin sınıftaki herhangi bir test yönteminden önce bir kez çalıştırılmasına neden olur. |
5 | @AfterClass Bu, yöntemi tüm testler bittikten sonra gerçekleştirecektir. Bu, temizlik faaliyetlerini gerçekleştirmek için kullanılabilir. |
6 | @Ignore Yoksay ek açıklaması, testi yok saymak için kullanılır ve bu test yürütülmez. |
Adlı bir java sınıf dosyası oluşturun JunitAnnotation.java ek açıklamayı test etmek için C: \> JUNIT_WORKSPACE içinde.
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class JunitAnnotation {
//execute before class
@BeforeClass
public static void beforeClass() {
System.out.println("in before class");
}
//execute after class
@AfterClass
public static void afterClass() {
System.out.println("in after class");
}
//execute before test
@Before
public void before() {
System.out.println("in before");
}
//execute after test
@After
public void after() {
System.out.println("in after");
}
//test case
@Test
public void test() {
System.out.println("in test");
}
//test case ignore and will not execute
@Ignore
public void ignoreTest() {
System.out.println("in ignore test");
}
}
Ardından, adında bir java sınıf dosyası oluşturun TestRunner.java ek açıklamaları yürütmek için C: \> JUNIT_WORKSPACE içinde.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(JunitAnnotation.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Test durumunu ve Test Runner sınıflarını javac kullanarak derleyin.
C:\JUNIT_WORKSPACE>javac JunitAnnotation.java TestRunner.java
Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın.
in before class
in before
in test
in after
in after class
true
Bu bölüm, çağrılan yöntemlerin sırasını tanımlayan JUnit'teki yöntemlerin yürütme prosedürünü açıklar. Aşağıda, örnekle birlikte JUnit test API yöntemlerinin yürütme prosedürü tartışılmaktadır.
Ek açıklamayı test etmek için C: \> JUNIT_WORKSPACE'de ExecutionProcedureJunit.java adlı bir java sınıfı dosyası oluşturun.
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class ExecutionProcedureJunit {
//execute only once, in the starting
@BeforeClass
public static void beforeClass() {
System.out.println("in before class");
}
//execute only once, in the end
@AfterClass
public static void afterClass() {
System.out.println("in after class");
}
//execute for each test, before executing test
@Before
public void before() {
System.out.println("in before");
}
//execute for each test, after executing test
@After
public void after() {
System.out.println("in after");
}
//test case 1
@Test
public void testCase1() {
System.out.println("in test case 1");
}
//test case 2
@Test
public void testCase2() {
System.out.println("in test case 2");
}
}
Ardından, adında bir java sınıf dosyası oluşturun TestRunner.java ek açıklamaları yürütmek için C: \> JUNIT_WORKSPACE içinde.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(ExecutionProcedureJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Test durumunu ve Test Runner sınıflarını javac kullanarak derleyin.
C:\JUNIT_WORKSPACE>javac ExecutionProcedureJunit.java TestRunner.java
Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın.
in before class
in before
in test case 1
in after
in before
in test case 2
in after
in after class
Yukarıdaki çıktıya bakın. Yürütme prosedürü aşağıdaki gibidir -
- Her şeyden önce, beforeClass () yöntemi yalnızca bir kez çalıştırılır.
- AfterClass () yöntemi yalnızca bir kez çalıştırılır.
- Before () yöntemi her test senaryosu için, ancak test senaryosu yürütülmeden önce yürütülür.
- After () yöntemi her test senaryosu için, ancak test senaryosunun yürütülmesinden sonra yürütülür.
- Öncesi () ve sonrası () arasında, her test senaryosu yürütülür.
Test senaryoları kullanılarak yürütülür JUnitCoresınıf. JUnitCore, testleri çalıştırmak için bir cephedir. JUnit 4 testleri, JUnit 3.8.x testleri ve karışımların çalıştırılmasını destekler. Testleri komut satırından çalıştırmak için java org.junit.runner.JUnitCore <TestClass> komutunu çalıştırın. Tek seferlik test çalıştırmaları için, statik yöntemi runClasses (Class []) kullanın.
Aşağıdaki beyanı org.junit.runner.JUnitCore sınıf:
public class JUnitCore extends java.lang.Object
Burada testlerin JUnitCore yardımıyla nasıl yürütüleceğini göreceğiz.
Bir Sınıf Oluşturun
Test edilecek bir java sınıfı oluşturun, diyelim ki, MessageUtil.java, C: \> JUNIT_WORKSPACE konumunda.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
}
Test Vaka Sınıfı Oluşturun
TestJunit.java gibi bir java test sınıfı oluşturun.
Test sınıfınıza bir test yöntemi testPrintMessage () ekleyin.
TestPrintMessage () yöntemine bir @Test Not ekleyin.
Test koşulunu uygulayın ve JUnit'in assertEquals API'sini kullanarak koşulu kontrol edin.
Adlı bir java sınıf dosyası oluşturun TestJunit.java C: \> JUNIT_WORKSPACE konumunda.
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Hello World";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
assertEquals(message,messageUtil.printMessage());
}
}
Test Runner Sınıfı Oluşturun
Şimdi adında bir java sınıf dosyası oluşturun TestRunner.javaC: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için. JUnitCore sınıfını içe aktarır ve test sınıfı adını parametresi olarak alan runClasses () yöntemini kullanır.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Test durumunu ve Test Runner sınıflarını javac kullanarak derleyin.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java
Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın.
Hello World
true
Test suitebirkaç birim test durumunu bir araya getirmek ve birlikte çalıştırmak için kullanılır. JUnit'te her ikisi de@RunWith ve @SuiteEk açıklamalar, süit testlerini çalıştırmak için kullanılır. Bu bölüm, iki test sınıfına sahip bir örnek alır:TestJunit1 & TestJunit2, Test Suite kullanılarak birlikte çalışan.
Bir Sınıf Oluşturun
Test edilecek bir java sınıfı oluşturun, diyelim ki, MessageUtil.java C: \> JUNIT_WORKSPACE konumunda.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Test Vaka Sınıfları Oluşturun
Adlı bir java sınıf dosyası oluşturun TestJunit1.java C: \> JUNIT_WORKSPACE konumunda.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit1 {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
assertEquals(message, messageUtil.printMessage());
}
}
Adlı bir java sınıf dosyası oluşturun TestJunit2.java C: \> JUNIT_WORKSPACE konumunda.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit2 {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Test Suite Sınıfı Oluşturun
- Bir java sınıfı oluşturun.
- Sınıfa @RunWith (Suite.class) Ek Açıklamasını ekleyin.
- @ Suite.SuiteClasses annotation kullanarak JUnit test sınıflarına referans ekleyin.
Adlı bir java sınıf dosyası oluşturun TestSuite.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestJunit1.class,
TestJunit2.class
})
public class JunitTestSuite {
}
Test Runner Sınıfı Oluşturun
Adlı bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(JunitTestSuite.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Tüm java sınıflarını javac kullanarak derleyin.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit1.java
TestJunit2.java JunitTestSuite.java TestRunner.java
Şimdi, sağlanan Test Case sınıfında tanımlanan test senaryosunu çalıştıracak olan Test Runner'ı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın.
Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi Robert
true
Bazen öyle olur ki, bir test senaryosu çalıştırılırken kodumuz tamamen hazır değildir. Sonuç olarak, test durumu başarısız olur. @Ignore ek açıklama bu senaryoda yardımcı olur.
@Ignore ile açıklanmış bir test yöntemi yürütülmeyecektir.
Bir test sınıfına @Ignore not verilmişse, test yöntemlerinden hiçbiri çalıştırılmaz.
Şimdi @Ignore'u iş başında görelim.
Bir Sınıf Oluşturun
Test edilecek bir java sınıfı oluşturun, diyelim ki, MessageUtil.java C: \> JUNIT_WORKSPACE konumunda.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Test Vaka Sınıfı Oluşturun
TestJunit.java gibi bir java test sınıfı oluşturun.
Test sınıfınıza bir test yöntemi testPrintMessage () veya testSalutationMessage () ekleyin.
TestPrintMessage () yöntemine bir @Ignore Notu ekleyin.
Adlı bir java sınıf dosyası oluşturun TestJunit.java C: \ JUNIT_WORKSPACE konumunda.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Ignore
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Robert";
assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Test Runner Sınıfı Oluşturun
Adlı bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Javac kullanarak MessageUtil, Test case ve Test Runner sınıflarını derleyin.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java
Şimdi, sağlanan Test Senaryosu sınıfında tanımlanan testPrintMessage () test durumunu çalıştırmayacak olan Test Çalıştırıcısı'nı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın. testPrintMessage () test durumu test edilmemiştir.
Inside testSalutationMessage()
Hi!Robert
true
Şimdi, tüm test durumlarını yoksaymak için C: \> JUNIT_WORKSPACE'deki TestJunit'i güncelleyin. Sınıf düzeyinde @Ignore ekleyin.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
@Ignore
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Robert";
assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Javac kullanarak test durumunu derleyin.
C:\JUNIT_WORKSPACE>javac TestJunit.java
Test Runner'ınızı aşağıdaki gibi değiştirmeyin -
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Şimdi, sağlanan Test Senaryosu sınıfında tanımlanan herhangi bir test durumunu çalıştırmayacak olan Test Çalıştırıcısı'nı çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın. Test senaryosu test edilmemiştir.
true
JUnit, kullanışlı bir Zaman Aşımı seçeneği sunar. Bir test durumu, belirtilen milisaniye sayısından daha uzun sürerse, JUnit bunu otomatik olarak başarısız olarak işaretleyecektir. timeoutparametresi @Test açıklama ile birlikte kullanılır. @Test'i (zaman aşımı) çalışırken görelim.
Bir Sınıf Oluşturun
Test edilecek bir java sınıfı oluşturun, diyelim ki, MessageUtil.java C: \> JUNIT_WORKSPACE konumunda.
PrintMessage () yönteminin içine sonsuz bir while döngüsü ekleyin.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public void printMessage(){
System.out.println(message);
while(true);
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Test Vaka Sınıfı Oluşturun
Bir java test sınıfı oluşturun, diyelim ki TestJunit.java. TestPrintMessage () test senaryosuna 1000 zaman aşımı ekleyin.
Adlı bir java sınıf dosyası oluşturun TestJunit.java C: \> JUNIT_WORKSPACE konumunda.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test(timeout = 1000)
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
messageUtil.printMessage();
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Test Runner Sınıfı Oluşturun
Adlı bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Javac kullanarak MessageUtil, Test case ve Test Runner sınıflarını derleyin.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java
Şimdi, sağlanan Test Senaryosu sınıfında tanımlanan test senaryolarını çalıştıracak Test Çalıştırıcısını çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın. testPrintMessage () test durumu, birim testinin başarısız olduğunu işaretleyecektir.
Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
testPrintMessage(TestJunit): test timed out after 1000 milliseconds
false
JUnit, kodun istisna işlemesini izleme seçeneği sunar. Kodun istenen bir istisnayı atıp atmadığını test edebilirsiniz. expectedparametresi @Test açıklama ile birlikte kullanılır. @Test (beklenen) eylemini görelim.
Bir Sınıf Oluşturun
Test edilecek bir java sınıfı oluşturun, diyelim ki, MessageUtil.java C: \> JUNIT_WORKSPACE konumunda.
PrintMessage () yönteminin içine bir hata koşulu ekleyin.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public void printMessage(){
System.out.println(message);
int a = 0;
int b = 1/a;
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Test Vaka Sınıfı Oluşturun
Adlı bir java test sınıfı oluşturun TestJunit.java. TestPrintMessage () test durumuna beklenen bir ArithmeticException istisnası ekleyin.
Adlı bir java sınıf dosyası oluşturun TestJunit.java C: \> JUNIT_WORKSPACE konumunda.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test(expected = ArithmeticException.class)
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
messageUtil.printMessage();
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Test Runner Sınıfı Oluşturun
Adlı bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Javac kullanarak MessageUtil, Test case ve Test Runner sınıflarını derleyin.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java
Şimdi, sağlanan Test Senaryosu sınıfında tanımlanan test senaryolarını çalıştıracak Test Çalıştırıcısını çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın. testPrintMessage () test durumu geçilecek.
Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
true
JUnit 4 adlı yeni bir özellik tanıttı parameterized tests. Parametreli testler, bir geliştiricinin aynı testi farklı değerler kullanarak defalarca çalıştırmasına izin verir. Parametreli bir test oluşturmak için izlemeniz gereken beş adım vardır.
Test sınıfına @RunWith (Parameterized.class) ile açıklama ekleyin.
@Parameters ile açıklanmış, test veri kümesi olarak Nesnelerin Koleksiyonunu (Dizi olarak) döndüren genel bir statik yöntem oluşturun.
Test verilerinin bir "satırına" eşdeğer olanı alan genel bir kurucu oluşturun.
Test verilerinin her "sütunu" için bir örnek değişkeni oluşturun.
Test verilerinin kaynağı olarak örnek değişkenleri kullanarak test senaryolarınızı oluşturun.
Test senaryosu, her veri satırı için bir kez çağrılacaktır. Parametreli testleri iş başında görelim.
Bir Sınıf Oluşturun
Test edilecek bir java sınıfı oluşturun, diyelim ki, PrimeNumberChecker.java C: \> JUNIT_WORKSPACE konumunda.
public class PrimeNumberChecker {
public Boolean validate(final Integer primeNumber) {
for (int i = 2; i < (primeNumber / 2); i++) {
if (primeNumber % i == 0) {
return false;
}
}
return true;
}
}
Parametreli Test Durumu Sınıfı Oluşturun
Bir java test sınıfı oluşturun, diyelim ki PrimeNumberCheckerTest.java. Adlı bir java sınıf dosyası oluşturunPrimeNumberCheckerTest.java C: \> JUNIT_WORKSPACE konumunda.
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.Before;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
private Integer inputNumber;
private Boolean expectedResult;
private PrimeNumberChecker primeNumberChecker;
@Before
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}
// Each parameter should be placed as an argument here
// Every time runner triggers, it will pass the arguments
// from parameters we defined in primeNumbers() method
public PrimeNumberCheckerTest(Integer inputNumber, Boolean expectedResult) {
this.inputNumber = inputNumber;
this.expectedResult = expectedResult;
}
@Parameterized.Parameters
public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 2, true },
{ 6, false },
{ 19, true },
{ 22, false },
{ 23, true }
});
}
// This test will run 4 times since we have 5 parameters defined
@Test
public void testPrimeNumberChecker() {
System.out.println("Parameterized Number is : " + inputNumber);
assertEquals(expectedResult,
primeNumberChecker.validate(inputNumber));
}
}
Test Runner Sınıfı Oluşturun
Adlı bir java sınıf dosyası oluşturun TestRunner.java C: \> JUNIT_WORKSPACE içinde test olay (lar) ını yürütmek için.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(PrimeNumberCheckerTest.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Javac kullanarak PrimeNumberChecker, PrimeNumberCheckerTest ve Test Runner sınıflarını derleyin.
C:\JUNIT_WORKSPACE>javac PrimeNumberChecker.java PrimeNumberCheckerTest.java
TestRunner.java
Şimdi, sağlanan Test Senaryosu sınıfında tanımlanan test senaryolarını çalıştıracak Test Çalıştırıcısını çalıştırın.
C:\JUNIT_WORKSPACE>java TestRunner
Çıkışı doğrulayın.
Parameterized Number is : 2
Parameterized Number is : 6
Parameterized Number is : 19
Parameterized Number is : 22
Parameterized Number is : 23
true
JUnit'i ANT kullanarak nasıl çalıştıracağımızı göstermek için bir örneğimiz olacak. Aşağıda verilen adımları izleyin.
Adım 1: Apache Ant'ı indirin
Üzerinde çalıştığınız işletim sistemine bağlı olarak Apache Ant'ı indirin .
işletim sistemi | Arşiv Adı |
---|---|
pencereler | apache-ant-1.8.4-bin.zip |
Linux | apache-ant-1.8.4-bin.tar.gz |
Mac | apache-ant-1.8.4-bin.tar.gz |
Adım 2: Karınca Ortamını Ayarlayın
Yı kur ANT_HOMEANT kitaplıklarının makinenizde depolandığı temel dizin konumuna işaret etmek için ortam değişkeni. Ant kitaplıklarının apache-ant-1.8.4 klasöründe depolandığını varsayalım.
Sr.No. | İşletim Sistemi ve Açıklama |
---|---|
1 | Windows ANT_HOME ortam değişkenini C: \ Program Files \ Apache Software Foundation \ apache-ant-1.8.4 olarak ayarlayın. |
2 | Linux dışa aktar ANT_HOME = /usr/local/apache-ant-1.8.4 |
3 | Mac dışa aktar ANT_HOME = /Library/apache-ant-1.8.4 |
Sistem Yoluna Ant derleyici konumunu aşağıdaki gibi ekleyin -
işletim sistemi | Çıktı |
---|---|
pencereler | Dizeyi ekleyin %ANT_HOME\bin sistem değişkeninin sonunda, Path. |
Linux | dışa aktarma PATH = $PATH:$ANT_HOME / bin / |
Mac | gerekli değil |
3. Adım: JUnit Arşivini İndirin
İşletim sisteminize uygun bir JUnit Arşivi indirin.
işletim sistemi | Arşiv Adı |
---|---|
pencereler | junit4.10.jar |
Linux | junit4.10.jar |
Mac | junit4.10.jar |
Adım 4: Proje Yapısı Oluşturun
Bir klasör oluşturun TestJunitWithAnt C: \> JUNIT_WORKSPACE konumunda.
Bir klasör oluşturun src C: \> JUNIT_WORKSPACE> TestJunitWithAnt.
Bir klasör oluşturun test C: \> JUNIT_WORKSPACE> TestJunitWithAnt.
Bir klasör oluşturun lib C: \> JUNIT_WORKSPACE> TestJunitWithAnt.
Oluşturmak MessageUtil C: \> JUNIT_WORKSPACE> TestJunitWithAnt> src klasöründeki sınıf.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Oluşturmak TestMessageUtil C: \> JUNIT_WORKSPACE> TestJunitWithAnt> src klasöründeki sınıf.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestMessageUtil {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Junit-4.10.jar dosyasını C: \> JUNIT_WORKSPACE> TestJunitWithAnt> lib klasörüne kopyalayın.
ANT Build.xml oluştur
Kullanacağız <junit> JUnit test durumlarımızı yürütmek için Ant'ta görev.
<project name = "JunitTest" default = "test" basedir = ".">
<property name = "testdir" location = "test" />
<property name = "srcdir" location = "src" />
<property name = "full-compile" value = "true" />
<path id = "classpath.base"/>
<path id = "classpath.test">
<pathelement location = "lib/junit-4.10.jar" />
<pathelement location = "${testdir}" /> <pathelement location = "${srcdir}" />
<path refid = "classpath.base" />
</path>
<target name = "clean" >
<delete verbose = "${full-compile}"> <fileset dir = "${testdir}" includes = "**/*.class" />
</delete>
</target>
<target name = "compile" depends = "clean">
<javac srcdir = "${srcdir}" destdir = "${testdir}"
verbose = "${full-compile}">
<classpath refid = "classpath.test"/>
</javac>
</target>
<target name = "test" depends = "compile">
<junit>
<classpath refid = "classpath.test" />
<formatter type = "brief" usefile = "false" />
<test name = "TestMessageUtil" />
</junit>
</target>
</project>
Aşağıdaki Ant komutunu çalıştırın.
C:\JUNIT_WORKSPACE\TestJunitWithAnt>ant
Çıkışı doğrulayın.
Buildfile: C:\JUNIT_WORKSPACE\TestJunitWithAnt\build.xml
clean:
compile:
[javac] Compiling 2 source files to C:\JUNIT_WORKSPACE\TestJunitWithAnt\test
[javac] [parsing started C:\JUNIT_WORKSPACE\TestJunitWithAnt\src\
MessageUtil.java]
[javac] [parsing completed 18ms]
[javac] [parsing started C:\JUNIT_WORKSPACE\TestJunitWithAnt\src\
TestMessageUtil.java]
[javac] [parsing completed 2ms]
[javac] [search path for source files: C:\JUNIT_WORKSPACE\
TestJunitWithAnt\src]
[javac] [loading java\lang\Object.class(java\lang:Object.class)]
[javac] [loading java\lang\String.class(java\lang:String.class)]
[javac] [loading org\junit\Test.class(org\junit:Test.class)]
[javac] [loading org\junit\Ignore.class(org\junit:Ignore.class)]
[javac] [loading org\junit\Assert.class(org\junit:Assert.class)]
[javac] [loading java\lang\annotation\Retention.class
(java\lang\annotation:Retention.class)]
[javac] [loading java\lang\annotation\RetentionPolicy.class
(java\lang\annotation:RetentionPolicy.class)]
[javac] [loading java\lang\annotation\Target.class
(java\lang\annotation:Target.class)]
[javac] [loading java\lang\annotation\ElementType.class
(java\lang\annotation:ElementType.class)]
[javac] [loading java\lang\annotation\Annotation.class
(java\lang\annotation:Annotation.class)]
[javac] [checking MessageUtil]
[javac] [loading java\lang\System.class(java\lang:System.class)]
[javac] [loading java\io\PrintStream.class(java\io:PrintStream.class)]
[javac] [loading java\io\FilterOutputStream.class
(java\io:FilterOutputStream.class)]
[javac] [loading java\io\OutputStream.class(java\io:OutputStream.class)]
[javac] [loading java\lang\StringBuilder.class
(java\lang:StringBuilder.class)]
[javac] [loading java\lang\AbstractStringBuilder.class
(java\lang:AbstractStringBuilder.class)]
[javac] [loading java\lang\CharSequence.class(java\lang:CharSequence.class)]
[javac] [loading java\io\Serializable.class(java\io:Serializable.class)]
[javac] [loading java\lang\Comparable.class(java\lang:Comparable.class)]
[javac] [loading java\lang\StringBuffer.class(java\lang:StringBuffer.class)]
[javac] [wrote C:\JUNIT_WORKSPACE\TestJunitWithAnt\test\MessageUtil.class]
[javac] [checking TestMessageUtil]
[javac] [wrote C:\JUNIT_WORKSPACE\TestJunitWithAnt\test\TestMessageUtil.class]
[javac] [total 281ms]
test:
[junit] Testsuite: TestMessageUtil
[junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.008 sec
[junit]
[junit] ------------- Standard Output ---------------
[junit] Inside testPrintMessage()
[junit] Robert
[junit] Inside testSalutationMessage()
[junit] Hi!Robert
[junit] ------------- ---------------- ---------------
BUILD SUCCESSFUL
Total time: 0 seconds
Tutulma ile JUnit'i kurmak için aşağıda verilen adımları izleyin.
Adım 1: JUnit Arşivini İndirin
Sisteminizdeki işletim sistemine göre bir JUnit kavanozu indirin.
işletim sistemi | Arşiv Adı |
---|---|
pencereler | junit4.10.jar |
Linux | junit4.10.jar |
Mac | junit4.10.jar |
Yukarıdaki JAR dosyasını C: \> JUnit klasörüne kopyaladığınızı varsayın.
Adım 2: Eclipse Ortamını Ayarlayın
Tutulmayı açın → projeye sağ tıklayın ve özellik> Yol Oluştur> Oluşturma Yolunu Yapılandır'a tıklayın ve Dış Jar Ekle düğmesini kullanarak kütüphanelere junit-4.10.jar ekleyin.
Eclipse'inizin dahili JUnit eklentisine sahip olduğunu varsayıyoruz. C: \> eclipse \ plugins dizininde yoksa, şu adresten indirebilirsiniz:JUnit Plugin. Eclipse'in eklenti klasöründe indirilen zip dosyasını açın. Sonunda Eclipse'i yeniden başlatın.
Eclipse'iniz artık JUnit test senaryolarının geliştirilmesine hazır.
Adım 3: Eclipse'de JUnit kurulumunu doğrulayın
Proje oluştur TestJunitEclipse'de herhangi bir yerde. Ardından bir sınıf oluşturunMessageUtil projede test etmek için.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
}
Bir test sınıfı oluşturun TestJunit Projede.
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Hello World";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
assertEquals(message,messageUtil.printMessage());
}
}
Proje yapısı aşağıdaki olmalıdır -
Son olarak, programa sağ tıklayın ve programın çıktısını doğrulamak için JUnit olarak çalıştırın.
Sonucu doğrulayın.
JUnit uzantıları aşağıdadır -
- Cactus
- JWebUnit
- XMLUnit
- MockObject
Kaktüs
Cactus, sunucu tarafı java kodunu (Servletler, EJB'ler, Etiket Kitaplıkları, Filtreler) birim testi için basit bir test çerçevesidir. Cactus'un amacı, sunucu tarafı kod için test yazma maliyetini düşürmektir. JUnit kullanır ve onu genişletir. Cactus, testleri bir konteynerin içinde yürüten bir konteyner içi strateji uygular.
Kaktüs ekosistemi birkaç bileşenden oluşur -
Cactus FrameworkCactus'ün kalbidir. API'nin Cactus testleri yazmasını sağlayan motordur.
Cactus Integration Modules Cactus Framework'ü (Ant betikleri, Eclipse eklentisi ve Maven eklentisi) kullanmanın kolay yollarını sağlayan ön uçlar ve çerçevelerdir.
Aşağıdaki kod, Cactus'ün nasıl kullanılabileceğini gösterir.
import org.apache.cactus.*;
import junit.framework.*;
public class TestSampleServlet extends ServletTestCase {
@Test
public void testServlet() {
// Initialize class to test
SampleServlet servlet = new SampleServlet();
// Set a variable in session as the doSomething()
// method that we are testing
session.setAttribute("name", "value");
// Call the method to test, passing an
// HttpServletRequest object (for example)
String result = servlet.doSomething(request);
// Perform verification that test was successful
assertEquals("something", result);
assertEquals("otherValue", session.getAttribute("otherName"));
}
}
JWebUnit
JWebUnit, web uygulamaları için Java tabanlı bir test çerçevesidir. Web uygulamalarınızın doğruluğunu test etmek için HtmlUnit ve Selenium gibi mevcut test çerçevelerini birleşik, basit bir test arayüzüyle sarar.
JWebUnit, bir web uygulamasında gezinmek için uygulamanın doğruluğunu doğrulamak için bir dizi onayla birlikte yüksek düzeyde bir Java API'si sağlar. Buna bağlantılar aracılığıyla gezinme, form girişi ve gönderme, tablo içeriklerinin doğrulanması ve diğer tipik iş web uygulaması özellikleri dahildir.
Basit gezinme yöntemleri ve kullanıma hazır iddialar, yalnızca JUnit veya HtmlUnit kullanmaktan daha hızlı test oluşturmaya izin verir. HtmlUnit'ten Selenium gibi diğer eklentilere (yakında kullanıma sunulacak) geçmek isterseniz, testlerinizi yeniden yazmanıza gerek yoktur.
İşte örnek bir kod.
import junit.framework.TestCase;
import net.sourceforge.jwebunit.WebTester;
public class ExampleWebTestCase extends TestCase {
private WebTester tester;
public ExampleWebTestCase(String name) {
super(name);
tester = new WebTester();
}
//set base url
public void setUp() throws Exception {
getTestContext().setBaseUrl("http://myserver:8080/myapp");
}
// test base info
@Test
public void testInfoPage() {
beginAt("/info.html");
}
}
XMLUnit
XMLUnit, tek bir JUnit uzantı sınıfı, XMLTestCase ve aşağıdakiler hakkında iddiaların yapılmasına izin veren bir dizi destekleyici sınıf sağlar:
İki XML parçası arasındaki farklar (Diff ve DetailedDiff sınıfları aracılığıyla).
Bir XML parçasının geçerliliği (Validator sınıfı aracılığıyla).
XSLT kullanarak (Transform sınıfı aracılığıyla) bir XML parçasını dönüştürmenin sonucu.
Bir XML parçası üzerinde bir XPath ifadesinin değerlendirilmesi (XpathEngine arayüzünü uygulayan sınıflar aracılığıyla).
DOM Traversal (NodeTest sınıfı aracılığıyla) tarafından sunulan bir XML parçasındaki bağımsız düğümler.
Karşılaştırmak istediğimiz ve eşit olduklarını iddia ettiğimiz iki XML parçamız olduğunu varsayalım. Bunun gibi basit bir test sınıfı yazabiliriz -
import org.custommonkey.xmlunit.XMLTestCase;
public class MyXMLTestCase extends XMLTestCase {
// this test method compare two pieces of the XML
@Test
public void testForXMLEquality() throws Exception {
String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>";
String myTestXML = "<msg><localId>2376</localId></msg>";
assertXMLEqual("Comparing test xml to control xml", myControlXML, myTestXML);
}
}
MockObject
Bir birim testinde, sahte nesneler karmaşık, gerçek (sahte olmayan) nesnelerin davranışını simüle edebilir ve bu nedenle gerçek bir nesne pratik olmadığında veya bir birim testine dahil edilmesi imkansız olduğunda yararlıdır.
Sahte nesnelerle test etmek için ortak kodlama stili şudur:
- Sahte nesnelerin örneklerini oluşturun.
- Sahte nesnelerde durum ve beklentileri ayarlayın.
- Parametre olarak sahte nesnelerle etki alanı kodunu çağırın.
- Sahte nesnelerde tutarlılığı doğrulayın.
Aşağıda Jmock kullanan bir MockObject örneği verilmiştir.
import org.jmock.Mockery;
import org.jmock.Expectations;
class PubTest extends TestCase {
Mockery context = new Mockery();
public void testSubReceivesMessage() {
// set up
final Sub sub = context.mock(Sub.class);
Pub pub = new Pub();
pub.add(sub);
final String message = "message";
// expectations
context.checking(new Expectations() {
oneOf (sub).receive(message);
});
// execute
pub.publish(message);
// verify
context.assertIsSatisfied();
}
}