Bir Java sınıfım var. Üniteyi nasıl test edebilirim ?
Benim durumumda, bir ikili toplamı sınıf var. İki byte[]
dizi alır , bunları toplar ve yeni bir ikili dizi döndürür.
Bir Java sınıfım var. Üniteyi nasıl test edebilirim ?
Benim durumumda, bir ikili toplamı sınıf var. İki byte[]
dizi alır , bunları toplar ve yeni bir ikili dizi döndürür.
Yanıtlar:
Doğru bir giriş ile normal bir durum için beklenen ve istenen çıkışı tanımlayın.
Şimdi, bir sınıf bildirerek testi uygulayın, herhangi bir ad verin (Genellikle TestAddingModule gibi bir şey) ve testAdd yöntemini ekleyin (örn. Aşağıdaki gibi):
assertEquals(expectedVal,calculatedVal)
.Yönteminizi çalıştırarak test edin (Eclipse'de, sağ tıklayın, Farklı çalıştır → JUnit testi'ni seçin).
//for normal addition
@Test
public void testAdd1Plus1()
{
int x = 1 ; int y = 1;
assertEquals(2, myClass.add(x,y));
}
İstediğiniz gibi başka durumlar da ekleyin.
Yöntemin Null girdileri zarif bir şekilde işlediğini test edin (aşağıdaki örnek).
//if you are using 0 as default for null, make sure your class works in that case.
@Test
public void testAdd1Plus1()
{
int y = 1;
assertEquals(0, myClass.add(null,y));
}
@Test
gösterim gereklidir. Bu, birim test çalıştırıcısına, bu yöntemin bir birim testini temsil ettiğini ve yürütülmesi gerektiğini bildirmek için yapılır. Açıklama eklenmeyen yöntemler @Test
test çalıştırıcısı tarafından yürütülmez.
null
için a eklememelisiniz ? y
y
static
Test yönteminin değiştiricisine neden gerek olmadığını bilmek istiyorum .
Her ikisine de bu yazıyı sağlamak intellij ve Eclipse .
Eclipse:
Projeniz için birim testi yapmak için lütfen aşağıdaki adımları izleyin (bu testi yazmak için Eclipse kullanıyorum):
1- Yeni -> Java Projesi'ne tıklayın.
2- Proje adınızı yazın ve bitir'e tıklayın.
3- Projenize sağ tıklayın. Ardından Yeni -> Sınıf'a tıklayın.
4- Sınıf adınızı yazın ve bitir'e tıklayın.
Ardından, sınıfı şu şekilde tamamlayın:
public class Math {
int a, b;
Math(int a, int b) {
this.a = a;
this.b = b;
}
public int add() {
return a + b;
}
}
5- Dosya -> Yeni -> JUnit Test Durumuna tıklayın.
6- setUp () işaretini kontrol edin ve bitir'e tıklayın. SetUp (), testinizi başlattığınız yerdir.
7- Tamam'a tıklayın.
8- Burada, 7 ve 10'u ekliyorum. Yani, cevabın 17 olmasını bekliyorum. Test sınıfınızı şu şekilde tamamlayın:
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class MathTest {
Math math;
@Before
public void setUp() throws Exception {
math = new Math(7, 10);
}
@Test
public void testAdd() {
Assert.assertEquals(17, math.add());
}
}
9- Paket gezginde test sınıfınıza tıklayın ve Farklı çalıştır -> JUnit Testi üzerine tıklayın.
10- Bu testin sonucudur.
IntelliJ: Ekran görüntüleri için IntelliJ IDEA topluluğu 2020.1 kullandığımı unutmayın. Ayrıca, bu adımlardan önce jre'nizi ayarlamanız gerekir. JDK 11.0.4 kullanıyorum.
1- Projenizin ana klasörünü sağ tıklayın -> yeni -> dizini. Buna 'test' demelisiniz. 2- Test klasörünü sağ tıklayın ve uygun paketi oluşturun. Orijinal sınıfla aynı ambalaj adlarını oluşturmanızı öneririm. Ardından, test dizinine sağ tıklayın -> dizini farklı işaretle -> test kaynakları kökü. 3- Test dizinindeki doğru pakette, bir Java sınıfı oluşturmanız gerekir (Test.java kullanmanızı öneririm). 4- Oluşturulan sınıfta '@Test' yazın. Ardından, IntelliJ'in size sunduğu seçenekler arasında, sınıf yoluna 'JUnitx' Ekle'yi seçin. 5- Test yönteminizi test sınıfınıza yazın. Yöntem imzası şöyledir:
@Test
public void test<name of original method>(){
...
}
Aşağıdaki gibi iddialarınızı yapabilirsiniz:
Assertions.assertTrue(f.flipEquiv(node1_1, node2_1));
Bunlar eklediğim ithalat:
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
Aşağıdaki gibi yöntemlerinizi kontrol edebilirsiniz:
Assertions.assertEquals(<Expected>,<actual>);
Assertions.assertTrue(<actual>);
...
Birim testlerinizi çalıştırmak için, teste sağ tıklayın ve Çalıştır'a tıklayın.
Testiniz başarılı olursa, sonuç aşağıdaki gibi olacaktır:
Umut ediyorum bu yardım eder. Projenin yapısını GitHub https://github.com/m-vahidalizadeh/problem_solving_project içinde görebilirsiniz .
Bu çok genel bir sorudur ve cevaplanabileceği birçok yol vardır.
Testleri oluşturmak için JUnit kullanmak istiyorsanız, testcase sınıfınızı oluşturmanız ve daha sonra testlerin altında sınıfınızın / modülünüzün belirli işlevlerini test eden bireysel test yöntemleri oluşturmanız gerekir (tek testcase sınıfları genellikle tek bir "üretim" sınıfıyla ilişkilendirilir. test edilmektedir) ve bu yöntemlerin içinde çeşitli işlemleri gerçekleştirin ve sonuçları doğru olanla karşılaştırın. Mümkün olduğunca çok köşe vakasını denemek ve örtmek özellikle önemlidir.
Özel örneğinizde, örneğin aşağıdakileri test edebilirsiniz:
Sonuçları doğrulamak için org.junit.Assert sınıfından çeşitli assertXXX yöntemlerini kullanabilirsiniz (kolaylık olması açısından, 'static org.junit.Assert. *' Dosyasını içe aktarabilirsiniz). Bu yöntemler belirli bir koşulu test eder ve onaylamazsa (isteğe bağlı olarak belirli bir mesajla) testi başarısız olur.
Sizin durumunuzda örnek testcase sınıfı (tanımlanan yöntem içeriği olmadan):
import static org.junit.Assert.*;
public class AdditionTests {
@Test
public void testSimpleAddition() { ... }
@Test
public void testPositiveNegativeAddition() { ... }
@Test
public void testNegativePositiveAddition() { ... }
@Test
public void testNegativeAddition() { ... }
@Test
public void testOverflow() { ... }
}
Birim testleri yazmaya alışkın değilseniz, bunun yerine kodunuzu "görsel" olarak doğruladığınız geçici testleri yazarak test ediyorsanız (örneğin, klavyeyi kullanarak girilen bağımsız değişkenleri kabul eden ve sonuçları çıktısını alan basit bir ana yöntem yazarsınız) - ve sonra değerleri girmeye ve sonuçların doğru olup olmadığını kontrol etmeye devam ederseniz), bu tür testleri yukarıdaki formatta yazıp sonuçları manuel olarak yapmak yerine doğru assertXXX yöntemiyle doğrulayarak başlayabilirsiniz. Bu şekilde, manuel testler yapmanız gerektiğinde testi çok daha kolay bir şekilde tekrar çalıştırabilirsiniz.
@CoolBeans bahsettiğimiz gibi, bir göz atın jUnit . İşte size jUnit 4.x ile başlamanız için kısa bir eğitim
Son olarak, gerçekten test ve test odaklı geliştirme (TDD) hakkında daha fazla bilgi edinmek istiyorsanız, Kent Beck'in aşağıdaki kitabına bir göz atmanızı öneririm: Örnek Teste Dayalı Geliştirme .
Diğer yanıtlar, test sınıflarını ayarlamak için JUnit'in nasıl kullanılacağını göstermiştir. JUnit tek Java test çerçevesi değildir. Bununla birlikte, bir çerçeve kullanmanın teknik detaylarına odaklanmak, eylemlerinizi yönlendirmesi gereken en önemli kavramlardan uzaklaşmaktadır, bu yüzden bunlardan bahsedeceğim.
Test (her türlü şeyden) bir şeyin gerçek davranışını (Test Altındaki Sistem, SUT) beklenen davranışı ile karşılaştırır.
Otomatik test bir bilgisayar programı kullanılarak yapılabilir. Bu karşılaştırma esnek olmayan ve akıllı bir bilgisayar programı tarafından yapıldığından, beklenen davranışın kesin ve açık bir şekilde bilinmesi gerekir.
Bir programın veya bir programın (sınıf veya yöntem) bir kısmının yapması beklenen özelliktir . Test yazılımı bu nedenle SUT için bir spesifikasyona sahip olmanızı gerektirir. Bu, açık bir açıklama veya kafanızda beklenenin ne olduğuna dair örtülü bir özellik olabilir.
Bu nedenle otomatik birim testi, test ettiğiniz sınıfın veya yöntemin kesin ve açık bir belirtimini gerektirir.
Ancak bu kodu yazmak için yola çıktığınızda bu spesifikasyona ihtiyacınız vardı. Bu yüzden testin ne olduğunun bir kısmı aslında SUT'un bir satırını yazmadan önce başlar. Test Odaklı Geliştirme'nin (TDD) test tekniği bu fikri aşırıya çeker ve test edilecek kodu yazmadan önce birim test kodunu oluşturmanızı sağlar.
Birim test çerçeveleri SUT'unuzu iddialar kullanarak test eder . Bir iddia , SUT'un doğru davranması durumunda olması gereken mantıksal bir ifadedir ( boolean
sonuç türüne sahip bir ifade ; yüklem ) true
. Dolayısıyla spesifikasyon, iddia olarak ifade edilmelidir (veya yeniden ifade edilmelidir).
Bir spesifikasyonu iddia olarak ifade etmek için kullanışlı bir teknik, sözleşmeyle programlamadır . Bu özellikler açısından ne Hedefşartlar . Bir son koşul, bir yöntemden veya bir kurucudan döndükten sonra SUT'un herkes tarafından görülebilir durumu hakkında bir iddiadır. Bazı yöntemlerde değişmez olan ve yöntemin yürütülmesinden önce ve sonra doğru olan tahminler olan son koşullar vardır . Bir sınıfın , sınıfın her kurucusunun ve yönteminin son koşulları olan değişmezlere sahip olduğu söylenebilir ve bu nedenle her zaman doğru olmalıdır . Son koşullar (ve değişmezler) yalnızca tanıtım görünür durumu: public
ve protected
alanlar olarak ifade edilir.public
ve protected
yöntemler (alıcılar gibi) ve yöntemlere aktarılan (referans olarak) nesnelerin herkes tarafından görülebilir durumu.
Yeni başlayanlar, burada bazı kodları nasıl test edebileceklerini soran, kodu sunarak ancak bu kodun özelliklerini belirtmeden sorular sorarlar. Bu tartışmanın gösterdiği gibi, herkesin böyle bir soruya iyi bir cevap vermesi imkansızdır , çünkü en iyi potansiyel cevaplayıcıların spesifikasyonu tahmin etmesi gerekir ve bunu yanlış yapabilir. Asker sorununun besbelli bir şartname önemini anlamıyor ve bu nedenle ben burada açıklanan temellerini anlamak gerekir acemi biri önce bazı test kodunu yazmaya çalışıyorum.