如何创建一个测试来自另一个类的抽象代码的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() {}
}
答案 0 :(得分:0)
您无法实例化抽象类,因此无法直接测试它们。虽然测试现有的子类可能会起作用,但我个人只是为了测试而创建一个模拟子类,所以你知道你的子类不会覆盖任何具体的方法,即使现有的子类今天没有覆盖具体的方法,有人可能会在未来以某种方式修改子类,以使测试仍然成功但不再实际测试任何内容。
答案 1 :(得分:-1)
您不能创建抽象类的对象,但可以创建具体子类的对象。
您在AbstractCurve中编写的代码由具体的子类ConsumerCurve和ProducerCurve继承,因此您应该为这些类编写测试。