testing – Generic JUnit测试类

我编写了一个接口MyInterface,它将由不同的实现者实现.

我还编写了一个MyInterfaceTest类,它包含所有实现者应该能够用来测试其实现的通用测试方法.

我只是不知道如何让它作为JUnit测试工作.

目前,我有这样的事情:

public class MyInterfaceTest {
    private static MyInterface theImplementationToTest = null;

    @BeforeClass public static void setUpBeforeClass() throws Exception {
                // put your implementation here:
        theImplementationToTest = new Implementation(...);
    }

    @AfterClass public static void tearDownAfterClass() throws Exception { 
        theImplementationToTest = null;
    }

    @Test public void test1() { /* uses theImplementationToTest */ }    
    @Test public void test2() { /* uses theImplementationToTest */ }    
}

我使用静态方法setUpBeforeClass,因为每个实现的初始化需要花费很多时间,所以我想为所有测试初始化​​一次.

使用此版本的测试,实现者必须更改setUpBeforeClass的代码并放置自己的实现.

我确信还有另一种方法可以编写MyInterfaceTest,因此实现者只需继承它或向它发送参数,而不是更改代码.但是,我在JUnit中没有足够的经验来使它工作.你能告诉我怎么做吗?

解决方法

@H_301_19@ 您可以让子类只实现前面的类方法并继承所有测试.
import org.junit.*;

public class ImplementingClassTest extends MyInterfaceTest {

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        // put your implementation here:
         theImplementationToTest = new MyInterfaceImpl();
    }

}

这使得您正在编写的抽象类看起来像:

import org.junit.*;

public abstract class MyInterfaceTest {
    protected static MyInterface theImplementationToTest = null;

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        theImplementationToTest = null;
    }

    @Test
    public void test1() { /* uses theImplementationToTest */
    }

    @Test
    public void test2() { /* uses theImplementationToTest */
    }
}

通常,您将使该方法成为实现抽象所需的子类.这里不能这样做,因为它是静态设置方法. (此外,您可能希望重构实例化不需要很长时间,因为这通常是反模式).

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...