@Rule аннотация не работает при использовании TestSuite в JUnit

У меня есть 3 тестовых класса следующим образом:

пакет com.junittest.testcases;

Класс Test3:

import junit.framework.TestCase;

import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import annotations.DataSetRule;
import annotations.DataSets;
import com.junittest.test.MyClass;

public class Test3 extends TestCase{
    MyClass m = new MyClass();
    String group = "user";

    @Rule
    public TestRule dataSetRule = new DataSetRule();

    @Test
    public void test5() {
        System.out.println("In Test 5");
        //assertEquals(5, m.add(2,3));
    }

    @Test
    public void test6() throws Exception {
        org.junit.Assume.assumeTrue(group.equals("user"));
        System.out.println("In Test 6");
        //assertEquals(-2, m.sub(2,3));
    }

    @DataSets({"dataset","dataset1"})
    @Test
    public void test7() {
        System.out.println("In Test 7");
    }

    @Ignore
    @Test
    public void test8() {
        System.out.println("in test8");
    }
}

Класс Test2:

package com.junittest.testcases;

import org.junit.Test;

import singletons.SingletonClass;

import com.junittest.test.MyClass;

import junit.framework.TestCase;

public class Test2 extends TestCase{
MyClass m = new MyClass();
    public void setUp() {
        SingletonClass sc = SingletonClass.getInstance();
        System.out.println(SingletonClass.callCount);
    }

    @Test
    public void test3() {
        assertEquals(5, m.add(2,3));
    }

    @Test
    public void test4() {
        assertEquals(-2, m.sub(2,3));
    }
}

Класс Test1:

package com.junittest.testcases;

import org.junit.Test;

import singletons.SingletonClass;

import com.junittest.test.MyClass;

import junit.framework.TestCase;

public class Test1 extends TestCase{
    MyClass m = new MyClass();

    public void setUp() {
        SingletonClass sc = SingletonClass.getInstance();
        System.out.println(SingletonClass.callCount);
    }

    @Test
    public void test1() {
        assertEquals(4, m.add(2,3));
    }

    @Test
    public void test2() {
        assertEquals(-1, m.sub(2,3));
    }


}

И класс TestSuite:

package com.junittest.testcases;
import rules.SomeTest;
import singletons.SingletonClass;
import junit.framework.Test;
import junit.framework.TestSuite;

public class TestSuite1 {
    public static Test suite() {
        SingletonClass sc = SingletonClass.getInstance();
        System.out.println(SingletonClass.callCount);

        TestSuite suite = new TestSuite(TestSuite.class.getName());
        suite.addTestSuite(Test1.class);
        suite.addTestSuite(Test2.class);
        suite.addTestSuite(Test3.class);
        return suite;
    }
}

Проблема заключается в том, что он игнорирует тег @Rule в классе Test3 при запуске класса TestSuite1 из JUnit из eclipse и, следовательно, вывод не так, как ожидалось. Почему он игнорирует тег @Rule. Есть ли альтернатива для выполнения всех трех случаев?

Ответ 1

Вы смешиваете код JUnit 3 (junit.framework.*) и JUnit 4 (org.junit.*). Проблема должна исчезнуть, если вы используете только JUnit 4.

  • Удалить extends TestCase (они просто не нужны, потому что ваши тесты аннотируются с помощью @Test.
  • Добавьте аннотацию @Before к вашим методам setUp().
  • Используйте JUnit4 Suite: https://github.com/junit-team/junit/wiki/Aggregating-tests-in-suites