2017-10-22 4 views
0

問題:私はTestSuiteのカスタムインターフェイスを持っています。私は私のインターフェイスを持つことができますどのようにTestSuiteインターフェースで@Beforeclass && @Afterclassをjunitにするにはどうしたらいいですか?

public interface TestSuite { 

    abstract void setupRestAssuredForSuite(); 
    abstract void restoreDatabase(); 
    abstract void executeSuitePreparation(); 
    abstract void executeSuiteTearDown(); 

} 

それらを認めること@BeforeClassと@AfterClassのJUnitからの注釈とのTestSuiteインターフェイスの私の実装が含まれていますか?私はこれを別のやり方で完全に行うべきですか?私はそのようなことがインタフェースで可能かどうかを知りたいと思っています。

私はTestSuiteを実装するすべてのクラスで手動でアノテーションを記述する必要がありますか?またはexecuteSuitePreparation();executeSuiteTearDown();のメソッドは、TestSuite自体に何らかの形で存在し、セットアップ/ティアダウンの背後にあるコードを実装する必要があるため、アノテーションなしで実行することができます。

public class Foo extends Bar implements TestSuite 

私の知る限り、@Beforeclassメソッドと@Afterclassメソッドは静的でなければなりません。

これは状況に近づくばかげた方法ですか?そうであれば、違う方法をお勧めしますか?

+0

なぜ抽象クラスを作成し、@Beforeメソッドにタグを付けるだけですか? – daniu

+0

私はバーを拡張する必要があります、私はそこに何かが欠けています、どのように私はこの新しい抽象クラスを拡張することができますか? – symon

答えて

1

インターフェイスをmixinとして使用しようとしています。インターフェイスはミックスインではありません。私はを希望

public class Foo extends Bar implements TestSuite 
{ 
    private static Foo foo; 

    @BeforeClass 
    public void beforeClass() 
    { 
     foo = TestSuite.setup(); 
    } 

    @BeforeClass 
    public void beforeClass() 
    { 
     TestSuite.teardown(foo); 
    } 
} 

を:

public interface TestSuite { 

    abstract void setupRestAssuredForSuite(); 
    ... 


    static SomeReturn setup() 
    { 
     Database database = new Database(); 
     ... 
     return database; 
    } 

    static void teardown(SomeType foo) 
    { 
     foo.reset(); 
    } 
} 

は、その後、あなたの具体的な実装では、あなたが行うことができます。

は、おそらくあなたができる最善のは、必要な設定を行い、あなたのインターフェイスの静的メソッドを書くことです強くあなたのテストで継承を使用する必要があるかどうか再考することをお勧めします。それはコードの臭いのように思えますが、あなたのテストには十分な焦点があてられていない可能性があります。

関連する問題