2015-10-29 31 views
10

Şu anda çeşitli jenerik @Test'leri içeren bir BaseTest sınıfına sahibim.Parametreli çok katmanlı paketler

public abstract class BaseTest { 

    private String expected; 
    private String actual; 

    public BaseTest(String expected, String actual) { 
     this.expected = expected; 
     this.actual = actual; 
    } 

    public String methodToTest(String line) { 
     return line.trim(); 
    } 

    @Test 
    public void testNull() { 
     assertNull(methodToTest(null)); 
    } 

    // more @Tests... 
} 

SomeTest Çeşitli test durumları tanımlayan BaseTest uzanmaktadır.

@RunWith(Parallelized.class) 
public class SomeTest extends BaseTest { 
    // @Parameters (test cases) goes here... 
} 

ben sonra RunAllTests bir Suite koymak BaseTest uzanan birçok test var.

@RunWith(Suite.class) 
@SuiteClasses({ SomeTest.class, AnotherTest.class, etc... }) 
public class RunAllTests { } 

Yani ancak farklı bir sınıfa bunları içeren istiyorum ı daha @Test 's eklemek istediğiniz diyelim.

public class WhitespaceTest extends BaseTest { 

    public WhitespaceTest(String expected, String actual) { 
     super(expected, actual); 
    } 

    @Test 
    public void testNewline() { 
     assertEquals(expected, methodToTest(actual + "\n")); 
    } 

    // more @Tests... 
} 

O RunAllTests her sınıf için, ben BaseTestVEWhitespaceTest çalıştırmak böylece, her tek testi çalıştırmak için Suites başka "katmanı" ihtiyaç belirir. Bu katmanı uygulamak için nasıl giderim?

BaseTest içinde::

+0

Anlamıyorum. Neden şimdiki paketinize "WhitespaceTest" ekleyemiyorsunuz? Ayrıca, elbette birden fazla suitiniz var – dkatzel

+0

Mevcut testteki her bir "BaseTest" için her testi "WhitespaceTest" içinde çalıştırmak istiyorum. –

+0

Bir suite probleminden çok daha fazla bir miras sorunu gibi daha çok – dkatzel

cevap

1

İşte benim şimdiki (naif) geçici çözüm bu sorun

@Test 
public void testNewline() { 
    WhitespaceTest wt = new WhitespaceTest(expected, actual); 
    wt.testNewline(); 
} 

Bu çalışır, ancak yinelenen kod çok şey var. WhitespaceTest'daki her @Test için, BaseTest'da başka bir @Test oluşturmalısınız.

+0

Bunun işe yaramayacağını düşünüyorum: BaseTest'inizi bir dizi parametreyle çalıştırın (beklenen, gerçek). Test Whitespaces, Test Null davranışından başka bir parametre setini karşılardı. Belki de bu, BaseTest sınıfınızın tasarımında başarısızlığa işaret eder (sadece beklenen/gerçekleri atar). – CoronA

+0

Çalışıyor, sadece istemediğim bir dolaylılık seviyesi. Ama evet, şu anda tüm test modülümü haftada daha önce önerdiğiniz şeylere yeniden tasarlıyorum. –