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

2022-08-31 11:15:02

我是使用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() ;

答案 1

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

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


答案 2

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


推荐