2015-09-25 67 views
13

Ben permütasyon bir dizi testler birçok durumda @Parameterized kullanmak çalıştırmak olabilir. Bu çok iyi çalışır ve test kodunun kendisini basit ve temiz tutar., bazı testler hala sadece bir kez

Ancak bazen test yöntemlerinden bazılarının parametrelerden yararlanamadıkları için hala bir kez çalıştırılmasını istiyorum, JUnit ile test yöntemini "singleton" veya "run" olarak işaretlemenin bir yolu var mı? -bir Zamanlar"?

Not: Bu Eclipse tek testler çalışmıyor endişe yapar, ben bir paketi kullanarak birlikte çalışmasına Test sınıfları herhangi bir sayıda ilişkilendirebileceğiniz

+3

geliyor. – Makoto

+2

evet, bu benim aklıma gelen tek çözüm, ama gerçekten bir paketi, örneğin "ilgili" testleri sahip olmak ister bir test sınıf ... – centic

cevap

8

:) bunun nasıl yapılacağını biliyorum. Bu şekilde, sınıfınızı test ettiğinizde tüm testler çalıştırılır ve farklı test koşucularını karıştırabilirsiniz.

  1. Eğer
  2. olmayan parametreli testleri içeren diğer sınıf (lar) ekleyin parametreli test sınıfı
  3. bir başvuru ekleyin test ediyoruz sınıfla ilişkili bir test paketi oluşturun.

    import org.junit.runners.Suite; 
    import org.junit.runner.RunWith; 
    
    @RunWith(Suite.class) 
    @Suite.SuiteClasses({ParameterizedTestClass.class, UnitTests.class, MoreUnitTests.class}) 
    public class SutTestSuite{ 
        //Empty... 
    } 
    
+1

Evet, ben ile sona erecek neler Propably var bir sınıf için tüm testler, ben tek bir test-yöntemleri için bir açıklama gibi bir şey ... Öneriler için – centic

1

bazı yeni özellikler kazandırmak junit eklentileri/parametreli testler konusunda güç bir dizi vardır. zohhak, junit-parames ve junit-dataprovider kontrol edin. onlar Sen Enclosed runner ile testinizi yapısı olabilir parametrized ve basit junit testleri

+0

sayesinde bu bakmak sağlanmasını umduğunu ilginç! – centic

24

karıştırmak için izin verir. I "@RunWith (Enclosed.class)" bilen önce

@RunWith(Enclosed.class) 
public class TestClass { 

    @RunWith(Parameterized.class) 
    public static class TheParameterizedPart { 

     @Parameters 
     public static Object[][] data() { 
      ... 
     } 

     @Test 
     public void someTest() { 
      ... 
     } 

     @Test 
     public void anotherTest() { 
      ... 
     } 
    } 

    public static class NotParameterizedPart { 
     @Test 
     public void someTest() { 
      ... 
     } 
    } 
} 
0

yaklaşım, bir dış sınıf uzanan iç sınıfları, aşağıdaki (benzer) çözeltisi kullanılır. Bu yapıyı kullanmaya devam ediyorum çünkü testlerin aynı yerde olduğunu ve bazı özellikleri ve yöntemleri paylaştığını ve her şeyin bana daha net geldiğini seviyorum. Ardından, Eclipse'i kullanarak, çalışmamda, "Seçili proje, paket veya kaynak klasöründeki tüm testleri çalıştır" seçeneğini seçiyorum ve tüm bu testler sadece bir tıklama ile gerçekleştirilecek. Bu testler daha sonra parametreli testleri ile aynı grubundaki olmamalı gibi

public class TestBooksDAO { 

    private static BooksDAO dao; 

    @Parameter(0) 
    public String title; 
    @Parameter(1) 
    public String author; 

    @Before 
    public void init() { 
     dao = BooksDAO.getInstancia(); 
    } 

    /** Tests that run only once. */ 
    public static class SingleTests extends TestBooksDAO { 

     @Test(timeout=10000) 
     public void testGetAll() { 
      List<Book> books = dao.getBooks(); 
      assertNotNull(books); 
      assertTrue(books.size()>0); 
     } 

     @Test(timeout=10000) 
     public void testGetNone() { 
      List<Book> books = dao.getBooks(null); 
      assertNull(books); 
     } 
    } 

    /** Tests that run for each set of parameters. */ 
    @RunWith(Parameterized.class) 
    public static class ParameterizedTests1 extends TestBooksDAO { 

     @Parameters(name = "{index}: author=\"{2}\"; title=\"{0}\";") 
     public static Collection<Object[]> values() { 
      return Arrays.asList(new Object[][] { 
       {"title1", ""}, 
       {"title2", ""}, 
       {"title3", ""}, 
       {"title4", "author1"}, 
       {"title5", "author2"}, 
      }); 
     } 

     @Test(timeout=10000) 
     public void testGetOneBook() { 
      Book book = dao.getBook(author, title); 
      assertNotNull(book); 
     } 
    } 

    /** Other parameters for different tests. */ 
    @RunWith(Parameterized.class) 
    public static class ParameterizedTests2 extends TestBooksDAO { 

     @Parameters(name = "{index}: author=\"{2}\";") 
     public static Collection<Object[]> values() { 
      return Arrays.asList(new Object[][] { 
       {"", "author1"}, 
       {"", "author2"}, 
       {"", "author3"}, 
      }); 
     } 

     @Test(timeout=10000) 
     public void testGetBookList() { 
      List<Book> books = dao.getBookByAuthor(author); 
      assertNotNull(books); 
      assertTrue(books.size()>0); 
     } 
    } 
}