代码之家  ›  专栏  ›  技术社区  ›  whiskeysierra

如何在JUnit中拆分抽象测试用例?

  •  0
  • whiskeysierra  · 技术社区  · 14 年前

    我有一个接口“A”的抽象测试用例“AbstractATest”。它有几个测试方法(@test)和一个抽象方法:

    protected abstract A unit();
    

    我的问题:

    我想要例如“ainInitializeTest”、“aexectutest”和“AStopTest”。每个都是抽象的,包含多个测试。但对于我具体的“ConcurrentA”,我只想有一个具体的测试用例“ConcurrentATest”。

    我希望我的“问题”是清楚的。

    编辑
    看来我的描述不是那样的 清楚的 .
    是否可以通过测试的参考?

    3 回复  |  直到 14 年前
        1
  •  0
  •   Brian Agnew    14 年前

    为什么不让每个具体的测试用例通过一个名为via的方法初始化一个具体的测试实例 @Before . i、 e.初始化具体实例的新实例 每次测试。抽象测试类可以提供在这个实例上运行的测试(通过抽象类中的受保护字段引用)。

        2
  •  0
  •   Arne Burmeister    14 年前

    您可以向测试方法引入一个参数,并使用一个@DataProvider创建要测试的所有类的实例。好的,一次测试。

        3
  •  0
  •   Matthew Flynn    14 年前

    我不知道您是否已经解决了这个问题,但我建议您保留一个抽象测试,但将方法的实现外部化到那个抽象类中。

    例如,用初始化测试创建一个类

    public class InitializeTester {
        protected static void testInitializeA(A unit) {
            ...
                    assertSomething ...
        }
    
        protected static void testInitializeB(A unit) {
            ...
                    assertSomething ...
        }
    
    }
    

    包含执行测试的类:

    public class ExecuteTester {
        protected static void testExecuteA(A unit) {
            ...
                    assertSomething ...
        }
    
        protected static void testExecuteB(A unit) {
            ...
                    assertSomething ...
        }
    
    }
    

    那么你真正的抽象测试者:

    public abstract class ATester {
        @Test
        public void testInitializA() {
            InitializeTester.testInitializeA(unit());
        }
    
        @Test
        public void testInitializB() {
            InitializeTester.testInitializeB(unit());
        }
    
        @Test
        public void testExecuteA() {
            testExecuteTester.testExecuteA(unit());
        }
    
        @Test
        public void testExecuteB() {
            testExecuteTester.testExecuteB(unit());
        }
    
        abstract protected A unit(); 
    }
    

    您可能会发现抽象测试类有很多方法,但它们都非常短,因为它们将控制权传递给您的测试类。