2010-02-17 15 views
0

我有一个接口“A”的抽象测试用例“AbstractATest”。它有几个试验方法(@Test)和一个抽象方法:如何在JUnit中拆分抽象测试用例?

protected abstract A unit(); 

其下测试提供的单元。不,我有多个“A”的实现,例如“DefaultA”,“ConcurrentA”等。

我的问题: 这个测试用例很庞大(〜1500 loc),并且正在增长。所以我想把它分成多个测试用例。如何在Junit 4中组织/构建这些数据,而无需为每个实现和抽象测试用例都创建具体的测试用例。

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

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

编辑
看起来像我的描述是不是明确
是否可以将参考传递给测试?
我知道参数化测试,但这些需要静态方法,这不适用于我的设置。抽象测试用例的子类决定参数。

回答

0

为什么不让每个具体的测试用例都通过一个叫做@Before的方法来初始化一个具体的测试用例。即您在初始化之前的具体实例的新实例到每个测试。然后抽象测试类可以提供测试工作(通过抽象类中的受保护字段引用)。

因此,每个具体实例都会有一个测试类,而这些测试类只是提供一个新的实例来测试。这些派生自的抽象测试类提供了所有的测试。当你创建一个新的具体类型时,你只需要一个新的具体测试类来实例化该类的一个实例。

+0

这就是你我用“一个”抽象测试用例做的。但是,我怎么能把这个逻辑分解成多个类,由一个抽象测试用例来管理。 – whiskeysierra 2010-02-17 22:25:48

0

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

+0

但是,我的具体实现(当然)分散在几个程序包/模块/项目当然不知道彼此。 – whiskeysierra 2010-02-17 22:33:20

+0

哈,我可以看看 - 坐在你身边2,3公里;-) – 2010-02-18 11:53:17

0

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

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

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

    protected static void testInitializeB(A unit) { 
     ... 
       assertSomething ... 
    } 

} 

A类与执行测试:

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(); 
} 

您可能最终抽象测试课程有很多方法,但是他们都会很短,因为他们通过s控制到您的测试程序类。

+0

有趣的想法,但不得不为每个测试方法添加一个方法给ATester是很多样板代码,并且很可能在添加时被遗忘新的测试案例。 – whiskeysierra 2010-03-09 23:00:27