SORU
2 Aralık 2009, ÇARŞAMBA


Özel durum JUnit test için kötü formu?

JUnit için oldukça yeniyim, ve gerçekten en iyi uygulamalar, özel durumlar ve özel durum işleme için ne bilmiyorum.

Örneğin, bir IP adresi sınıf testleri yazıyorum diyelim. Eğer Adres boş ise bir İnvalidİPAddressException yapacağına yapıcı bir IP adresi(String Adres) vardır. Etrafında googling söyleyebilirim kadarıyla, boş parametre için test gibi olacaktır.

@Test
public void testNullParameter()
{
	try
	{
		IPAddress addr = new IPAddress(null);
		assertTrue(addr.getOctets() == null);
	}
	catch(InvalidIPAddressException e)
	{
		return;
	}

	fail("InvalidIPAddressException not thrown.");
}

Bu durumda,/catch istisna geliyor biliyorum çünkü mantıklı.

Ama şimdi Eğer testValidİPAddress yazmak istiyorum, birkaç yolu bunu yapmak için vardır:

#1:

@Test
public void testValidIPAddress() throws InvalidIPAddressException
{
	IPAddress addr = new IPAddress("127.0.0.1");
	byte[] octets = addr.getOctets();

	assertTrue(octets[0] == 127);
	assertTrue(octets[1] == 0);
	assertTrue(octets[2] == 0);
	assertTrue(octets[3] == 1);
}

#2:

@Test
public void testValidIPAddress()
{
	try
	{
		IPAddress addr = new IPAddress("127.0.0.1");
		byte[] octets = addr.getOctets();

		assertTrue(octets[0] == 127);
		assertTrue(octets[1] == 0);
		assertTrue(octets[2] == 0);
		assertTrue(octets[3] == 1);
	}
	catch (InvalidIPAddressException e)
	{
		fail("InvalidIPAddressException: "   e.getMessage());
	}
}

Standart uygulamadır beklenmedik durumlar JUnit atmak için veya sadece onlarla başa çıkmak kendine?

Yardım için teşekkürler.

CEVAP
2 Aralık 2009, ÇARŞAMBA


Aslında, eski stilözel durum testiistisna atar kod etrafında bir try sarmak için ve daha sonra deneyin bloğu sonunda fail() bir açıklama ekleyin. Şöyle bir şey:

public void testNullParameter() {
    try {
        IPAddress addr = new IPAddress(null);
        fail("InvalidIPAddressException not thrown.");
    } catch(InvalidIPAddressException e) {
        assertNotNull(e.getMessage());
    }
}

Bu kadar ne yazdın ama farklı değil

  1. assertTrue(addr.getOctets() == null); işe yaramaz.
  2. Bu niyet ve sözdizimi daha net IMO ve böylece okuması daha kolay.

Yine de, bu biraz çirkin. Ama bu durum, test JUnit 4 en büyük gelişmelerden biri olarak JUnit 4 kurtarmaya gelir yerdir. 4, şimdi test yazabilirsiniz JUnit ile bu gibi:

@Test (expected=InvalidIPAddressException.class) 
public void testNullParameter() throws InvalidIPAddressException {
    IPAddress addr = new IPAddress(null);
}

Güzel, değil mi?

Şimdi, ilgili asıl soru, Eğer böyle bir beklentim yok bir istisna olmak atılmış, bence kesinlikle gitmek için yolu #1 (çünkü daha az ayrıntılı) ve izin JUnit özel durum işlenecek ve başarısız test olarak bekleniyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GWTLecturer

    GWTLecturer

    18 EKİM 2012
  • Microsoft Research

    Microsoft Re

    24 EKİM 2008
  • Crossover

    Crossover

    18 HAZİRAN 2007