SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
JUNIT	
    Muharrem DEMİR
muharremdemir@gmail.com
     http://demir.me
Nedir?	
•  Java programlama dili için geliştirilmiş bir test
   framework
•  Erich Gamma ve Kent Beck tarafından geliştirilmiştir.
•  Birden fazla IDE ve derlemearacı için desteği 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 Programming’nin yaratıcısı ve Agile Manifesto’nun
    yazarlarından biri
Neye  Yarar?	
•  Test kod tabanının standart olması
•  Test ve test suite’leri oluşturulması
•  Basit anlamda birim test yapabilmenizi sağlarken, belirli
   framework entegrasyonları ile karmaşık testleri de
   kolaylaştırır.

•  Örneğin junit.framework.TestCase ile unit test
   yazabilirken,
•  @Runwith(SpringJUnit4ClassRunner.class) kullanarak
   Spring framework ile entegre çalıştırılması sağlanabilir
Birim  Test	
•  junit.framework.TestCase sınıfını kalıtan bir sınıf
   içerisinde birim test yazılabilr.
•  Birim testlerin koşabilmesi için test metodlarının “test”
   anahtar sözcüğü ile başlaması gereklidir.
•  setUp() metodu ile test öncesi ayarlar ve nesne
   oluşturma işlemleri 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.
•  Eğer hata olması durumu söz konusuysa fail()
   kullanılmalı ve test başarı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 context’ini junit ile yüklenmesini sağlayabilir ve
   herhangi bir uygulama sunucusuna yükleme yapmadan
   uygulamayı çalıştırabilirsiniz.
•  Daha çok annotasyon ile yönetim tercih edilir.
•  Method başlangı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 geliştirdiği plugin kullanılmaktadır.
•    @ContextConfiguration ile Spring Context’inin hangi xml dosyasından
     yükleneceği gösterilmektedir.
•    Test kodu için farklı context yüklenebileceği için kod tabanındaki context de
     kullanılabilir. Ancak gerçek ortam kodunda sorun oluşmaması 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 istediğiniz testlerin birlikte tek bir
   sınıf üzerinden koşmasını sağlayabilirsiniz.
•  Bu durum belirli akışları tek bir akışta çalıştırabilmenizi
   ve test senaryoları oluşturabilmesini sağlar
Örnek
@RunWith(Suite.class)
@Suite.SuiteClasses({ InvoiceServiceTest.class, SummaryServiceTest.class,
                    LimitManagementUtil.class, InvoiceServiceUtilTest.class })
public final class ProjectRunSuite {

}
Sorular?

Mais conteúdo relacionado

Semelhante a Junit

Test Driven Development
Test Driven Development Test Driven Development
Test Driven Development Nezir Yürekli
 
Introduction to Android Programming
Introduction to Android ProgrammingIntroduction to Android Programming
Introduction to Android ProgrammingAnıl Sözeri
 
Struts 2 Ile Tanisma
Struts 2 Ile TanismaStruts 2 Ile Tanisma
Struts 2 Ile Tanismaokanozeren
 
Java ile grogramlamaya giris
Java ile grogramlamaya girisJava ile grogramlamaya giris
Java ile grogramlamaya girisrudiacikgoz
 
progressokulu.com Advanced Business Language Slide 1
progressokulu.com Advanced Business Language Slide 1progressokulu.com Advanced Business Language Slide 1
progressokulu.com Advanced Business Language Slide 1kaan verdioglu
 
Spring uygulamaların exception handling yönetimi
Spring uygulamaların exception handling yönetimiSpring uygulamaların exception handling yönetimi
Spring uygulamaların exception handling yönetimiSistek Yazılım
 
9. şablonlar
9. şablonlar9. şablonlar
9. şablonlarkarmuhtam
 
Stored procedure
Stored procedureStored procedure
Stored procedureoktaygokgol
 
İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09Cihan Özhan
 
Android'e Giriş Eğitimleri 1_2
Android'e Giriş Eğitimleri 1_2Android'e Giriş Eğitimleri 1_2
Android'e Giriş Eğitimleri 1_2Univerist
 
İş Birimleri ve PO'lar için Test Teknikleri
İş Birimleri ve PO'lar için Test Teknikleriİş Birimleri ve PO'lar için Test Teknikleri
İş Birimleri ve PO'lar için Test TeknikleriOnur Baskirt
 
JUnit ve Docker yardimiyla kolay entegrasyon testleri
JUnit ve Docker yardimiyla kolay entegrasyon testleriJUnit ve Docker yardimiyla kolay entegrasyon testleri
JUnit ve Docker yardimiyla kolay entegrasyon testleriİlkin Balkanay
 

Semelhante a Junit (20)

Test Driven Development
Test Driven Development Test Driven Development
Test Driven Development
 
Introduction to Android Programming
Introduction to Android ProgrammingIntroduction to Android Programming
Introduction to Android Programming
 
Komut satırı JAVA
Komut satırı JAVAKomut satırı JAVA
Komut satırı JAVA
 
Struts 2 Ile Tanisma
Struts 2 Ile TanismaStruts 2 Ile Tanisma
Struts 2 Ile Tanisma
 
Java ile grogramlamaya giris
Java ile grogramlamaya girisJava ile grogramlamaya giris
Java ile grogramlamaya giris
 
progressokulu.com Advanced Business Language Slide 1
progressokulu.com Advanced Business Language Slide 1progressokulu.com Advanced Business Language Slide 1
progressokulu.com Advanced Business Language Slide 1
 
Selenium sunum
Selenium sunumSelenium sunum
Selenium sunum
 
Spring uygulamaların exception handling yönetimi
Spring uygulamaların exception handling yönetimiSpring uygulamaların exception handling yönetimi
Spring uygulamaların exception handling yönetimi
 
9. şablonlar
9. şablonlar9. şablonlar
9. şablonlar
 
Sunum tdd
Sunum tddSunum tdd
Sunum tdd
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09
 
Android'e Giriş Eğitimleri 1_2
Android'e Giriş Eğitimleri 1_2Android'e Giriş Eğitimleri 1_2
Android'e Giriş Eğitimleri 1_2
 
Net ve i̇stisnalar
Net ve i̇stisnalarNet ve i̇stisnalar
Net ve i̇stisnalar
 
Java Thread
Java ThreadJava Thread
Java Thread
 
Visual Studio Developer Tools
Visual Studio Developer ToolsVisual Studio Developer Tools
Visual Studio Developer Tools
 
Extjs 4 education
Extjs 4 educationExtjs 4 education
Extjs 4 education
 
Jmeter
JmeterJmeter
Jmeter
 
İş Birimleri ve PO'lar için Test Teknikleri
İş Birimleri ve PO'lar için Test Teknikleriİş Birimleri ve PO'lar için Test Teknikleri
İş Birimleri ve PO'lar için Test Teknikleri
 
JUnit ve Docker yardimiyla kolay entegrasyon testleri
JUnit ve Docker yardimiyla kolay entegrasyon testleriJUnit ve Docker yardimiyla kolay entegrasyon testleri
JUnit ve Docker yardimiyla kolay entegrasyon testleri
 

Junit

  • 1. JUNIT Muharrem DEMİR muharremdemir@gmail.com http://demir.me
  • 2. Nedir? •  Java programlama dili için geliştirilmiş bir test framework •  Erich Gamma ve Kent Beck tarafından geliştirilmiştir. •  Birden fazla IDE ve derlemearacı için desteği 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 Programming’nin yaratıcısı ve Agile Manifesto’nun yazarlarından biri
  • 3. Neye  Yarar? •  Test kod tabanının standart olması •  Test ve test suite’leri oluşturulması •  Basit anlamda birim test yapabilmenizi sağlarken, belirli framework entegrasyonları ile karmaşık testleri de kolaylaştırır. •  Örneğin junit.framework.TestCase ile unit test yazabilirken, •  @Runwith(SpringJUnit4ClassRunner.class) kullanarak Spring framework ile entegre çalıştırılması sağlanabilir
  • 4. Birim  Test •  junit.framework.TestCase sınıfını kalıtan bir sınıf içerisinde birim test yazılabilr. •  Birim testlerin koşabilmesi için test metodlarının “test” anahtar sözcüğü ile başlaması gereklidir. •  setUp() metodu ile test öncesi ayarlar ve nesne oluşturma işlemleri 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. •  Eğer hata olması durumu söz konusuysa fail() kullanılmalı ve test başarı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 context’ini junit ile yüklenmesini sağlayabilir ve herhangi bir uygulama sunucusuna yükleme yapmadan uygulamayı çalıştırabilirsiniz. •  Daha çok annotasyon ile yönetim tercih edilir. •  Method başlangı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 geliştirdiği plugin kullanılmaktadır. •  @ContextConfiguration ile Spring Context’inin hangi xml dosyasından yükleneceği gösterilmektedir. •  Test kodu için farklı context yüklenebileceği için kod tabanındaki context de kullanılabilir. Ancak gerçek ortam kodunda sorun oluşmaması 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 istediğiniz testlerin birlikte tek bir sınıf üzerinden koşmasını sağlayabilirsiniz. •  Bu durum belirli akışları tek bir akışta çalıştırabilmenizi ve test senaryoları oluşturabilmesini sağlar Örnek @RunWith(Suite.class) @Suite.SuiteClasses({ InvoiceServiceTest.class, SummaryServiceTest.class, LimitManagementUtil.class, InvoiceServiceUtilTest.class }) public final class ProjectRunSuite { }