繁体   English   中英

如何为抽象类创建Junit测试?

[英]How Do I Create A Junit Test for an Abstract Class?

如何创建一个JUnit测试来测试另一个类的抽象代码? 我有一个名为AbstractCurve的Abstract类和一个扩展了抽象曲线的“生产者和消费者曲线”。 ConsumerCurve和ProducerCurve是相同的,但类名称不同。 这是代码:

public abstract class AbstractCurve {
    ArrayList < Point > myCurve = new ArrayList < Point > ();

    public AbstractCurve(int np, double m, double b, int dx) {
        for (int i = 0; i < np; i++) {
            int x = i * dx;
            double y = m * x + b;
            if (y < 0) throw new IllegalArgumentException();
            ArrayList < Point > myCurve = new ArrayList < Point > ();
            myCurve.add(new Point(x, y));
        }
    }

    public boolean add(Point p) {
        myCurve.add(p);
        sort();
        return false;
    }

    public void delete(Point p) {
        myCurve.remove(p);
    }

    public abstract void sort();

    public String toString() {
        String t = " ";
        for (int i = 0; i < myCurve.size(); i++) {
            t = t + myCurve.get(i).toString() + " ";
        }
        return t;
    }

    public int contains(Point p) {
        for (int index = 0; index < myCurve.size(); index++) {
            myCurve.equals(index);
        }
        return -1;
    }
}

消费者:

public class ConsumerCurve extends AbstractCurve{
    public ConsumerCurve() {
        super(0, 0, 0, 0);
    }
    public void sort() {}
}

您无法实例化抽象类,因此无法直接对其进行测试。 虽然测试现有子类可能会起作用,但我个人将创建一个模拟子类仅用于测试,因此您知道您的子类不会覆盖任何具体方法,即使现有的子类今天不覆盖具体方法,将来有人可能会以某种方式修改子类,以使测试仍然成功但不再实际进行任何测试。

您不能创建抽象类的对象,但是可以创建具体子类的对象。

您在AbstractCurve中编写的代码由您的具体子类ConsumerCurve和ProducerCurve继承,因此您应该为这些类编写测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM