2017-06-25 5 views
2

私はこのフォーラムに類似しているかもしれない別の質問があることを知っています。重複としてマーキングする前に読んでください。別のテストクラスで既存のJUnitテストをどのように使用するのですか?

私は、別のクラスで定義されているテストを@beforeアノテーションを介して実行する方法を探しています。 - 私はすでに別のクラスを拡張するので、私のために不可能である
1. TestClass1からTestClass2を拡張:そこに似たオンライン質問している2つの提案で

public TestClass1 { 
    @before 
    public void setup() throws Exception{ 
     super.setup(); 
    } 

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

public TestClass2 { 
    @Test 
    public void testSomethingAndSomethingElse() { 
     // Somehow execute testSomething() in a way which will force 
      it to go through the @before 
     // and then test something else 
     } 
} 


2は、このように、委任を使用してTestClass2からTestClass1にアクセスするには、次の

// Instantiate TestClass1 as a member of TestClass2 
public TestClass2 { 
    private TestClass1 one = new TestClass1(); 
    public void testSomethingAndSomethingElse1() { 
     one.testSomething(); 
    } 
} 

問題ここone.testSomethingを呼び出すとき()ということです - あなたはTestClass1の@Before注釈、中を通過しないであろう、私の他のオブジェクトを初期化するには大文字小文字の区別が必要です。

おそらく別の方法がありますか?

使用は統合テストであり、単体テストではありません。 別の@testの中で@testを使用する能力が必要ですが、他の回避策は必要ありません。

+0

明示的に呼び出す方法'TestClass2'の' setup() 'ですか? – c0der

+0

は、setup()がTestClass1の@testのデータを準備しているためです。 TestClass2から呼び出されると、このデータはTestClass1の範囲外になります。 –

+0

同じクラスの 'TestClass1'と' TestClass2'サブクラスはありますか?もしそうなら、 '@ before'アノテーションをスーパークラスに移動することを検討してください。 – c0der

答えて

1

多くのテストクラスで同じコードを再利用しようとすると、フレームワークJUnit@Ruleを使用することをお勧めします。

public class SetupResource extends ExternalResource { 
    @Override 
     protected void before() throws Throwable { 
     //setup the code 
    } 
} 

before()方法であなたが望むのコードを入れて、そのようなJUnitRuleを定義します:たぶんExternalResourceは何が必要です

@Rule 
public ExternalResource resource = new SetupResource() 
0

は引き上げを検討TestClass1と同じクラスのTestClass2サブクラスを想定すると、 @beforeスーパークラスの注釈:

public class TestCalss { 

    @Before 
    public void setUp() throws Exception { 
     System.out.println("setup"); 
    } 
} 

public class TestCalss1 extends TestCalss{} 
public class TestCalss2 extends TestCalss{} 
関連する問題