際際滷

際際滷Share a Scribd company logo
JUNIT	
    Muharrem DEM聴R
muharremdemir@gmail.com
     http://demir.me
Nedir?	
≒ Java programlama dili i巽in gelitirilmi bir test
   framework
≒ Erich Gamma ve Kent Beck taraf脹ndan gelitirilmitir.
≒ Birden fazla IDE ve derlemearac脹 i巽in destei vard脹r.
   (Eclipse, Netbeans, IntelliJ, maven, ant vb.)



族霞 Erich Gamma; Design Patterns kitab脹n脹 yazar脹, Junit, Eclipse JDT ve
    Microsoft Visual Studio proje lideri
族霞 Kent Beck; Extreme Programmingnin yarat脹c脹s脹 ve Agile Manifestonun
    yazarlar脹ndan biri
Neye Yarar?	
≒ Test kod taban脹n脹n standart olmas脹
≒ Test ve test suiteleri oluturulmas脹
≒ Basit anlamda birim test yapabilmenizi salarken, belirli
   framework entegrasyonlar脹 ile karma脹k testleri de
   kolaylat脹r脹r.

≒ rnein junit.framework.TestCase ile unit test
   yazabilirken,
≒ @Runwith(SpringJUnit4ClassRunner.class) kullanarak
   Spring framework ile entegre 巽al脹t脹r脹lmas脹 salanabilir
Birim Test	
≒ junit.framework.TestCase s脹n脹f脹n脹 kal脹tan bir s脹n脹f
   i巽erisinde birim test yaz脹labilr.
≒ Birim testlerin koabilmesi i巽in test metodlar脹n脹n test
   anahtar s旦zc端端 ile balamas脹 gereklidir.
≒ setUp() metodu ile test 旦ncesi ayarlar ve nesne
   oluturma ilemleri yap脹labilir.
≒ tearDown() metodu ile setUp metodundaki ayarlar脹
   s脹f脹rlayabilirsiniz.
≒ setUp her test metodu 旦ncesinde, tearDown ise
   sonras脹nda birer kez 巽al脹t脹r脹l脹r.
zellikler	
≒ Test metodlar脹 public olmal脹d脹r
≒ Metodlar void d旦nmelidir
≒ Herhangi bir parametre almamal脹d脹r

public void testHede()

≒ Her test metodu tek bir ak脹 veya birim testi yapmal脹d脹r
≒ Testlerdeki 巽脹kt脹lar assert* ifadeleri ile kontrol edilmeli ve
   bu kontrol sonras脹 test ak脹脹 ilerletilmelidir.
≒ Eer hata olmas脹 durumu s旦z konusuysa fail()
   kullan脹lmal脹 ve test baar脹s脹z sonu巽land脹r脹lmal脹d脹r
Assert	
≒   assertEquals
≒   assertNotNull
≒   assertSame
≒   assertNotSame
≒   assertTrue
≒   assertFalse
≒   assertThat




v金 assertEquals .equals() ile kontrol ederken assertSame == ile kontrol
    yapar.
package com.turkcell.singlehub.test.unit;
                                                           rnek	
import org.apache.log4j.Logger;
import junit.framework.TestCase;
import com.turkcell.singlehub.util.MathUtils;

public class MathUtilsTest extends TestCase{

                  private Logger logger = Logger.getLogger(MathUtilsTest.class);

                  @Override
                  public void setUp(){
                                    logger.debug("run setUp");
                  }

                  public void testCut(){
                                    double d = MathUtils.cut(1.1234, MathUtils.SCALE_TWO);
                                    String result = String.valueOf(d);
                                    assertEquals(4, result.length());
                  }

                  public void testCut2(){
                                    double d = MathUtils.cut(1.1234, MathUtils.SCALE_TWO);
                                    String result = String.valueOf(d);
                                    assertFalse(result.length() == 5);
                  }
                  public void tearDown(){
                                    logger.debug("run tearDown");
                  }
Entegrasyon Testi	
≒ Belirli bir ak脹脹n veya entegrasyon noktas脹na ait servisin test
   edilmesidir.
≒ Junit, Spring, Hibernate vb. frameworkler ile birlikte
   巽al脹abilmektedir.
≒ Spring contextini junit ile y端klenmesini salayabilir ve
   herhangi bir uygulama sunucusuna y端kleme yapmadan
   uygulamay脹 巽al脹t脹rabilirsiniz.
≒ Daha 巽ok annotasyon ile y旦netim tercih edilir.
≒ Method balang脹c脹nda @Test annotasyonu varsa test
   otomatik olarak 巽al脹t脹r脹l脹r.
≒ Test 旦ncesinde herhangi bir ayar gerekiyorsa @Before,
   sonras脹nda ise @After annotasyonu olan metodlar Junit
   taraf脹ndan otomatik olarak 巽al脹t脹r脹l脹r.
rnek	
≒   @RunWith kullan脹larak hangi Junit 巽al脹t脹r脹c脹 ile testin 巽al脹t脹r脹laca脹 belirtilir.
     Burada Spring Framework端n端n Junit i巽in gelitirdii plugin kullan脹lmaktad脹r.
≒   @ContextConfiguration ile Spring Contextinin hangi xml dosyas脹ndan
     y端klenecei g旦sterilmektedir.
≒   Test kodu i巽in farkl脹 context y端klenebilecei i巽in kod taban脹ndaki context de
     kullan脹labilir. Ancak ger巽ek ortam kodunda sorun olumamas脹 i巽in farkl脹
     konfigurasyon dosyas脹 tercih edilmelidir.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:context-Test.xml"})
public abstract class AbstractTest {

}
rnek 	
	
public class InvoiceServiceTest extends AbstractTest {

         @Autowired
         private InvoiceService invoiceService;

         @Test
         public void hasUnpaidInvoices() {
                  ServiceResult<Boolean> serviceResult = invoiceService
                                    .hasUnpaidInvoice(user);
                  Assert.assertNotNull(serviceResult.getValue());
                  Assert.assertTrue(serviceResult.getValue());
         }
}
Test Suite	
≒ Test suite kullanarak istediiniz testlerin birlikte tek bir
   s脹n脹f 端zerinden komas脹n脹 salayabilirsiniz.
≒ Bu durum belirli ak脹lar脹 tek bir ak脹ta 巽al脹t脹rabilmenizi
   ve test senaryolar脹 oluturabilmesini salar
rnek
@RunWith(Suite.class)
@Suite.SuiteClasses({ InvoiceServiceTest.class, SummaryServiceTest.class,
                    LimitManagementUtil.class, InvoiceServiceUtilTest.class })
public final class ProjectRunSuite {

}
Sorular?

More Related Content

Junit

  • 1. JUNIT Muharrem DEM聴R muharremdemir@gmail.com http://demir.me
  • 2. Nedir? ≒ Java programlama dili i巽in gelitirilmi bir test framework ≒ Erich Gamma ve Kent Beck taraf脹ndan gelitirilmitir. ≒ Birden fazla IDE ve derlemearac脹 i巽in destei vard脹r. (Eclipse, Netbeans, IntelliJ, maven, ant vb.) 族霞 Erich Gamma; Design Patterns kitab脹n脹 yazar脹, Junit, Eclipse JDT ve Microsoft Visual Studio proje lideri 族霞 Kent Beck; Extreme Programmingnin yarat脹c脹s脹 ve Agile Manifestonun yazarlar脹ndan biri
  • 3. Neye Yarar? ≒ Test kod taban脹n脹n standart olmas脹 ≒ Test ve test suiteleri oluturulmas脹 ≒ Basit anlamda birim test yapabilmenizi salarken, belirli framework entegrasyonlar脹 ile karma脹k testleri de kolaylat脹r脹r. ≒ rnein junit.framework.TestCase ile unit test yazabilirken, ≒ @Runwith(SpringJUnit4ClassRunner.class) kullanarak Spring framework ile entegre 巽al脹t脹r脹lmas脹 salanabilir
  • 4. Birim Test ≒ junit.framework.TestCase s脹n脹f脹n脹 kal脹tan bir s脹n脹f i巽erisinde birim test yaz脹labilr. ≒ Birim testlerin koabilmesi i巽in test metodlar脹n脹n test anahtar s旦zc端端 ile balamas脹 gereklidir. ≒ setUp() metodu ile test 旦ncesi ayarlar ve nesne oluturma ilemleri yap脹labilir. ≒ tearDown() metodu ile setUp metodundaki ayarlar脹 s脹f脹rlayabilirsiniz. ≒ setUp her test metodu 旦ncesinde, tearDown ise sonras脹nda birer kez 巽al脹t脹r脹l脹r.
  • 5. zellikler ≒ Test metodlar脹 public olmal脹d脹r ≒ Metodlar void d旦nmelidir ≒ Herhangi bir parametre almamal脹d脹r public void testHede() ≒ Her test metodu tek bir ak脹 veya birim testi yapmal脹d脹r ≒ Testlerdeki 巽脹kt脹lar assert* ifadeleri ile kontrol edilmeli ve bu kontrol sonras脹 test ak脹脹 ilerletilmelidir. ≒ Eer hata olmas脹 durumu s旦z konusuysa fail() kullan脹lmal脹 ve test baar脹s脹z sonu巽land脹r脹lmal脹d脹r
  • 6. Assert ≒ assertEquals ≒ assertNotNull ≒ assertSame ≒ assertNotSame ≒ assertTrue ≒ assertFalse ≒ assertThat v金 assertEquals .equals() ile kontrol ederken assertSame == ile kontrol yapar.
  • 7. package com.turkcell.singlehub.test.unit; rnek import org.apache.log4j.Logger; import junit.framework.TestCase; import com.turkcell.singlehub.util.MathUtils; public class MathUtilsTest extends TestCase{ private Logger logger = Logger.getLogger(MathUtilsTest.class); @Override public void setUp(){ logger.debug("run setUp"); } public void testCut(){ double d = MathUtils.cut(1.1234, MathUtils.SCALE_TWO); String result = String.valueOf(d); assertEquals(4, result.length()); } public void testCut2(){ double d = MathUtils.cut(1.1234, MathUtils.SCALE_TWO); String result = String.valueOf(d); assertFalse(result.length() == 5); } public void tearDown(){ logger.debug("run tearDown"); }
  • 8. Entegrasyon Testi ≒ Belirli bir ak脹脹n veya entegrasyon noktas脹na ait servisin test edilmesidir. ≒ Junit, Spring, Hibernate vb. frameworkler ile birlikte 巽al脹abilmektedir. ≒ Spring contextini junit ile y端klenmesini salayabilir ve herhangi bir uygulama sunucusuna y端kleme yapmadan uygulamay脹 巽al脹t脹rabilirsiniz. ≒ Daha 巽ok annotasyon ile y旦netim tercih edilir. ≒ Method balang脹c脹nda @Test annotasyonu varsa test otomatik olarak 巽al脹t脹r脹l脹r. ≒ Test 旦ncesinde herhangi bir ayar gerekiyorsa @Before, sonras脹nda ise @After annotasyonu olan metodlar Junit taraf脹ndan otomatik olarak 巽al脹t脹r脹l脹r.
  • 9. rnek ≒ @RunWith kullan脹larak hangi Junit 巽al脹t脹r脹c脹 ile testin 巽al脹t脹r脹laca脹 belirtilir. Burada Spring Framework端n端n Junit i巽in gelitirdii plugin kullan脹lmaktad脹r. ≒ @ContextConfiguration ile Spring Contextinin hangi xml dosyas脹ndan y端klenecei g旦sterilmektedir. ≒ Test kodu i巽in farkl脹 context y端klenebilecei i巽in kod taban脹ndaki context de kullan脹labilir. Ancak ger巽ek ortam kodunda sorun olumamas脹 i巽in farkl脹 konfigurasyon dosyas脹 tercih edilmelidir. @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:context-Test.xml"}) public abstract class AbstractTest { }
  • 10. rnek public class InvoiceServiceTest extends AbstractTest { @Autowired private InvoiceService invoiceService; @Test public void hasUnpaidInvoices() { ServiceResult<Boolean> serviceResult = invoiceService .hasUnpaidInvoice(user); Assert.assertNotNull(serviceResult.getValue()); Assert.assertTrue(serviceResult.getValue()); } }
  • 11. Test Suite ≒ Test suite kullanarak istediiniz testlerin birlikte tek bir s脹n脹f 端zerinden komas脹n脹 salayabilirsiniz. ≒ Bu durum belirli ak脹lar脹 tek bir ak脹ta 巽al脹t脹rabilmenizi ve test senaryolar脹 oluturabilmesini salar rnek @RunWith(Suite.class) @Suite.SuiteClasses({ InvoiceServiceTest.class, SummaryServiceTest.class, LimitManagementUtil.class, InvoiceServiceUtilTest.class }) public final class ProjectRunSuite { }