如何用JUnit测试Java中的抽象类?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我是使用JUnit进行Java测试的新手。我必须使用Java,我想使用单元测试。

我的问题是:我有一个抽象类与一些抽象方法。但是有一些方法不是抽象的。我如何用JUnit测试这个类?示例代码(非常简单):

abstract class Car {

    public Car(int speed, int fuel) {
        this.speed = speed;
        this.fuel = fuel;
    }

    private int speed;
    private int fuel;

    abstract void drive();

    public int getSpeed() {
        return this.speed;
    }

    public int getFuel() {
        return this.fuel;
    }
}

我想测试getSpeed()getFuel()功能。

这个问题类似的问题在这里,但它不使用JUnit。

在JUnit FAQ部分,我找到了这个链接,但我不明白作者想要用这个例子说什么。这段代码是什么意思?

public abstract Source getSource() ;
提问于
用户回答回答于

如果你没有具体的类的实现,而且这些方法不是static测试它们的重点?如果你有一个具体的类,那么你将测试这些方法作为具体类的公共API的一部分。

我知道你在想什么“我不想一遍又一遍地测试这些方法,这就是我创建抽象类的原因”,但我反驳说,单元测试的重点是允许开发人员进行更改,运行测试并分析结果。这些变化部分可能包括重写你的抽象类的方法,既protectedpublic,这可能导致根本性的行为变化。根据这些更改的性质,它可能会影响您的应用程序以意想不到的方式运行,可能是负面的。如果你有一个很好的单元测试套件,这些类型变化引起的问题应该在开发时显而易见。

用户回答回答于

创建一个继承抽象类的具体类,然后测试具体类从抽象类继承的函数。

扫码关注云+社区