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

新手上路,请多包涵

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

原文由 vasco 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 691
2 个回答

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

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

原文由 nsfyn55 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Kevin Bowersox 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏