7

私は 3 つの JUnit テスト クラスを持っており、それらはすべて同じ setup() メソッドを含むいくつかの共通コードを持っていました。そこで、このコードを TestCase を拡張する独自のクラスに分解し、以前の 3 つの JUnit テスト クラスがこの新しいクラスを拡張するようにしました。新しいスーパー クラスには、テスト自体は含まれていません。

ただし、私たちのビルドでは、JUnit はすべての JUnit テスト クラスを実行します。これには、テストのない新しいスーパー クラスも含まれます。次のエラーが発生します。

junit.framework.AssertionFailedError: No tests found in com.acme.ControllerTest

ControllerTest で何もしない単純なテストを作成することで、このエラーを取り除くことができました。しかし、これを修正するよりクリーンな方法はありますか?

4

1 に答える 1

9

これは私のために働く

JUnit3

public abstract class BaseTest extends TestCase {

    public void setUp(){
        System.out.println("before called");
    }
}

public class Test1 extends BaseTest {

    public void test() {
        Assert.assertTrue(true);
        System.out.println("Test1");
    }   
}

public class Test2 extends BaseTest {

    public void test() {
        Assert.assertTrue(true);
        System.out.println("Test2");
    }   
}

私が得る出力は

before called
Test2
before called
Test1

JUnit4

JUnit4 では、基本クラスを抽象化する必要さえありません。次のものを使用できます

public class BaseTest {
    @Before
    public void setUp(){
        System.out.println("before called");
    }
}

public class Test1 extends BaseTest {
    @Test
    public void test() {
        Assert.assertTrue(true);
        System.out.println("Test1");
    }   
}

public class Test2 extends BaseTest {
    @Test
    public void test() {
        Assert.assertTrue(true);
        System.out.println("Test1");
    }   
}

JUnit 4 を使用することを強くお勧めします。注釈を使用すると、混乱を招く可能性のあるこの継承依存関係の一部が壊れることになります。

于 2012-09-05T21:49:51.380 に答える