2016-10-08 7 views
1

私は1つの単体テストクラスで複数の設定を使用する必要があります。また、私はメソッドをテストするために多くのケースを使用する必要があります。私としては、それは以下のようなもののために一緒にランナーパラメータ化理論を使用するのが最も自然である:TheoriesとParameterizedユニットテストランナーを一緒に使うには?

@RunWith(ParameterizedTheories.class) 
public class Tests { 

    Setup o; 

    @Parameters(name = "{index}: {0}") 
    public static Iterable<Object> data() { 
     return asList(new Object[][]{ 
         asArray("First", Tests::setup1), 
         asArray("Second",Tests::setup2), 
        }); 

    public Tests(String name, Setuper setuper) { 
     Setup o = setuper.setup(); 
    } 

    @Theory 
    public void AddSevenTest(
      @TestedOn(ints = {0, 5, 10})int x){ 

     o.implementation.addSevenAnd(x); 
     verify(o.storageMock).save(x + 7); 
    } 

    static Setup setup1(){ 
     // ... 
    } 

    static Setup setup2(){ 
     // ... 
    } 

    interface Setuper { 
     Setup setup(); 
    } 

    static class Setup { 
     IStorage storageMock; 
     ITesting implementation; 
    } 
} 

を私は使用のためには何も見つかりませんでした。私を助けることは何ですか?何?

答えて

0

これは、既存のJUnitツール(クラス)を使用するだけでは実装できませんが、JUnit Runner-sの階層から1つのクラスを拡張することで実現できません。

また、この問題は、以下の方法で他の単純なことで解決することができます。

@RunWith(Theories.class) 
public class BaseTests { 

    protected Setup o; 

    @Before 
    public void setUp(); 

    @Theory 
    public void AddSevenTest(
     @TestedOn(ints = {0, 5, 10})int x){ 

     o.implementation.addSevenAnd(x); 
     verify(o.storageMock).save(x + 7); 
    } 

    static class Setup { 
     IStorage storageMock; 
     ITesting implementation; 
    } 
} 

public class Tests1 extends BaseTests { 
    @Ovveride @Before 
    public void setUp() { 
     // ... 
    } 
} 

public class Tests2 extends BaseTests { 
    @Ovveride @Before 
    public void setUp() { 
     // ... 
    } 
} 

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
    Tests1.class, 
    Tests2.class 
}) 

public class Tests { 
} 
関連する問題