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

2023-11-23

我是使用 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() and getFuel()功能。

与这个问题类似的问题是here,但它没有使用 JUnit。

在 JUnit FAQ 部分,我发现这个链接,但是我不明白作者想用这个例子表达什么。这行代码是什么意思?

public abstract Source getSource() ;

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JUnit 测试 Java 中的抽象类? 的相关文章

随机推荐

  • “_csv.writer”对象没有属性“write”

    我不确定这里出了什么问题 我有一个想要过滤的 csv 文件 我想删除以 开头的所有行以及第三列是字符串 chrM 的所有行 我基本上将我的代码设置为类似于这里的答案 类型错误 需要一个字符缓冲区对象 但我收到错误 import re imp
  • 为 NSNotificationCenter = Swift deinit() 调用 .removeObserver 的正确位置?

    我读过很多关于为 NSNotificationCenter 调用 removeObserver 的正确位置的建议 因为 viewDidUnload 不是一个选项 我只是想知道 Swift 中新的 deinit 是否是一个不错的选择 nick
  • 如何阅读 ex_intro 的定义?

    我正在阅读Mike Nahas 的 Coq 入门教程 其中说 ex intro 的参数是 谓词 证人 与证人一起提出的谓词的证明 我在看定义 Inductive ex A Type P A gt Prop Prop ex intro for
  • Pandas 群体中的独特价值

    我有一个数据框 需要对其进行分组 然后进行分组 我需要从子组中返回子组是什么以及列的唯一值 df pandas DataFrame country pandas Series US Canada US US gender pandas Se
  • 使用 MongoDB 的简单投票系统

    快速问题我在 mongodb 中有一个文章列表 我希望用户能够对文章投赞成票或反对票 我的第一种方法是在文章集中有两行 分别称为 赞成票 和 反对票 它们的数字如下 点赞数 360 否决票 102 那么我需要通过求和来订购 赞成票 反对票这
  • JSON 中可以使用注释吗?

    我可以在 a 中使用注释吗JSON文件 如果是这样 怎么办 No JSON 是纯数据的 如果您包含评论 那么它也必须是数据 您可以有一个名为的指定数据元素 comment 或其他内容 应被使用 JSON 数据的应用程序忽略 您可能最好在生成
  • 使用通用迭代器访问数组数组的元素

    Is it 未定义的行为在 C 中访问相邻数组中的元素 如以下代码所示 include
  • Shiny 的 tabsetPanel 未在多个选项卡中显示绘图

    我正在尝试使用多个tabPanel控制范围内的tabsetPanel in Shiny 假设我使用以下代码从一个选项卡开始 mainPanel tabsetPanel tabPanel Plot plotOutput distPlot 代码
  • 在 AWS ECR 上重新标记映像会创建新映像

    我在 AWS ECR 上有一个私有 Docker 存储库 我正在尝试按照此处的说明使用新标签来标记现有图像https docs aws amazon com AmazonECR latest userguide image retag ht
  • 如何在 testNG 报告中包含失败屏幕截图

    目前我正在通过这种方式截取测试失败的屏幕截图 AfterMethod alwaysRun true public void catchExceptions ITestResult result Calendar calendar Calen
  • 在 Mac OS X 上多态捕获 -fno-rtti 共享库中的异常

    我正在构建一个共享库f no rtti 在内部 这个库抛出std invalid argument并捕获std exception 但是catch从未输入子句 以下代码重现了该问题 g 4 2 Mac OS X 10 6 library c
  • 具有条件字段的骨干形式

    首先感谢各位大佬骨干形式谁制作了一个完美集成在backbone js框架中的工具 我正在使用backbone js 和backbone forms 插件 但我需要创建条件字段 假设我有以下表格 我想根据在中选择的值显示 或不显示 带有 th
  • Tabular.vim:如何对齐位于单词开头的两个不同分隔符的第一次出现?

    我已经安装了 Tabular 插件 只要不涉及复杂的正则表达式 它对我来说就非常有用 但我有这个清单 one abc rstuvw foo three defg bar four mn opq kludge hack twelve hijk
  • 如何在异步方法中启动未等待的后台任务?

    我正在努力思考如何执行某些操作very 在异步方法的世界中长时间运行的后台处理 使用来自的词汇斯蒂芬 克利里的博客 我有兴趣启动 委托任务 after await 执行 承诺任务 我想在承诺的值可用时立即返回该值 并让委托任务在后台继续进行
  • javascript 提升:首先提升什么——变量还是函数?

    最近我对 javascript 提升行为感到困惑 现在我陷入了困境 所以 有两个例子 var alpha alpha var beta beta f beta var f function f1 console log beta funct
  • MariaDB CURRENT_TIMESTAMP 默认值

    我正在尝试为用户注册设置一个数据库 并希望有一列包含注册日期 默认情况下应该是当前时间 我尝试运行这个查询 CREATE TABLE users
  • jasper报告中的书写方法?

    我正在创建一个 jasper 报告 我想编写一个方法 该方法接受整数并执行一些处理并返回一个字符串 我不知道如何在 jasper 报告中编写方法 可以写吗 任何人都可以帮助我吗这 我使用的是iReport3 6 0 示例代码
  • ActionModel 的未定义方法“on”

    我收到以下错误 NoMethodError in Users new Showing app views users form new haml where line 7 raised undefined method on for
  • 如何在不使用create_function的情况下重写示例?

    当查看 PHP 时创建函数它说 如果您使用 PHP 5 3 0 或更新版本匿名函数应该使用 我想重新创建相同的功能create function但使用anonymous function 我不知道如何做 或者我是否正确地接近它 本质上 我如
  • 如何使用 JUnit 测试 Java 中的抽象类?

    我是使用 JUnit 进行 Java 测试的新手 我必须使用 Java 并且我想使用单元测试 我的问题是 我有一个带有一些抽象方法的抽象类 但有些方法并不是抽象的 如何使用 JUnit 测试此类 示例代码 非常简单 abstract cla