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

时间:2015-09-23 02:41:02

标签: java junit

如何创建一个测试来自另一个类的抽象代码的JUnit测试?我有一个名为AbstractCurve的抽象类和一个"生产者和消费者曲线"这扩展了抽象曲线。 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() {}
}

2 个答案:

答案 0 :(得分:0)

您无法实例化抽象类,因此无法直接测试它们。虽然测试现有的子类可能会起作用,但我个人只是为了测试而创建一个模拟子类,所以你知道你的子类不会覆盖任何具体的方法,即使现有的子类今天没有覆盖具体的方法,有人可能会在未来以某种方式修改子类,以使测试仍然成功但不再实际测试任何内容。

答案 1 :(得分:-1)

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

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