用Sensei 和 AssertJ使单元测试变得可读。

发布日期:2021年12月01日
作者:肖恩-弗拉尼根
案例研究

用Sensei 和 AssertJ使单元测试变得可读。

发布日期:2021年12月01日
作者:肖恩-弗拉尼根
查看资源
查看资源

开发人员用各种方法创建和测试自己的代码。其中一种方法是单元测试--一种非常流行的测试自己代码中最小部分的方法。如果写得好,单元测试可以帮助提高你的代码质量,并减少成本和开发时间。无论是否作为测试驱动开发(TDD)的一部分,单元测试都是现代开发实践的一个关键部分,其重要性导致了许多测试框架的产生。

但是,如果没有适当的测试框架和指导,单元测试可能会变得复杂和不可读,因为重点转移到覆盖率和数量,而不是质量和可读性。这在一个有许多单元测试的大型活跃代码库中尤其如此。

一个好的测试框架有助于创建良好的可读测试,这些测试是简单的,并注重质量测试。它们也有助于记录使用你的代码的方法。AssertJ就是这样一个框架。

AssertJ是一个流畅的API,用于在Java中编写单元测试。它让你写的测试断言读起来像英语,有上下文感知的自动完成功能。如果你有大量的测试,并需要提高它们的可读性,你可能希望将所有的测试迁移到AssertJ,并确保所有未来的测试都充分利用AssertJ的优势。

但是完整的迁移需要花费巨大的精力和时间来手动完成,所以它经常被跳过或推迟到其他开发任务。因此,我们创建了Sensei - 一个高度可定制的IntelliJ插件,可以帮助迁移你当前的单元测试,以使用AssertJ,并使所有未来的测试以正确的方式编写。这是通过Sensei"开发团队 "已经为你创建的一些配方(规则)完成的。Sensei 使得执行一次性迁移或采取渐进式迁移到AssertJ的方法变得容易,一次一个测试。一旦你迁移到AssertJ,配方将继续帮助开发人员在编写单元测试时应用快速修复,以便你的单元测试在整个代码库中继续保持统一、标准和一致。

如何设置AssertJ有大小规则的视频

关于Sensei

Sensei 是一个高度可定制的IntelliJ插件,可以在输入时扫描和修复不良代码--有数百个可下载的代码转换和迁移配方(规则),以及一个内置的能力来制作你自己的。有了Sensei ,开发人员可以在输入时纠正不良的代码模式,这样他们就可以更快地交付高质量的代码,并最终以一致和标准的方式跨团队和项目编写代码。

下面是一个迁移样本的例子,也许可以帮助你看到Sensei 是如何使你的单元测试迁移到使用AssertJ时不费吹灰之力。

为什么说AssertJ是编写单元测试的优秀框架?

而不是像这样写一个JUnit断言的测试。

你可以用AssertJ写这个。

这意味着你可以像阅读英文句子一样从左到右阅读断言,而且很清楚哪个是期望值(在这种情况下,尺寸为3)。你有多少次把断言写错了,像这样?

这些只是简单的例子。你的检查和断言越复杂,AssertJ就越能帮助你使你的测试简单和可读。它与你的IDE的自动完成功能配合得很好。只要你输入

它将弹出所有你可以检查的东西,基于myResult的类型。如果它是一个集合,你可以检查它的内容、大小、是否包含某些值或类型,等等。

AssertJ支持基元和它们的盒式类型、原子类型、集合、数组、地图、日期、java.time、期货、文件/路径、InputStreams、Throwables和URL。如果你有一个喜欢的Hamcrest自定义匹配器,你可以通过HamcrestCondition将其与AssertJ一起使用。

可读的单元测试使开发人员很容易用正常的英语阅读代码,因此很容易发现错误以及增加覆盖率--这使得AssertJ成为良好的Java单元测试不可缺少的框架。

将传统的单元测试转移到AssertJ的配方

我们编写了一本食谱,帮助你用AssertJ编写一致的代码。它可以帮助你将你的断言从这些框架中的任何一个迁移到AssertJ。JUnit 3、JUnit 4、JUnit 5和FEST-Assert。

这个食谱可以在Sensei 中配置,以便立即使用,你可以在这里找到Sensei 的安装说明。

在写代码时写出更好的单元测试--逐步提高JUnit质量

Sensei AssertJ的食谱不只是帮助你从其他框架迁移过来。它有一些食谱,可以帮助你改进你的测试编写,打破旧的习惯,并编写更多的AssertJ测试。

例如,假设你写了一个测试,它看起来像这样。

也许你甚至使用上面的一个迁移配方,从这个JUnit风格的断言中迁移了它。

Sensei AssertJ的食谱有一个配方,也可以检测到这种老式的断言,并提出将其转换为这种断言。

另一个配方可以从以下方面进行转换。

到这一点。

一次性迁移和跨团队的统一编码实践--与Sensei

从上面的例子我们可以看出,手动迁移单元测试到使用AssertJ会涉及到大量的精力和时间,而这些时间最好用在编写更好的测试上。通过使用Sensei ,你可以轻松地将你的单元测试迁移到AssertJ上,而且很有信心。你可以执行一次性迁移,或者在遇到个别测试时将其迁移到AssertJ。Sensei ,提供这种灵活性,使代码迁移不那么痛苦。

单元测试迁移只是许多方法中的一个例子,Sensei ,可以用来在你的项目中编写一致的代码。你可以随时注意在拉动请求中或自己编码时经常遇到的反模式或某些手动代码转换。如果你有一套经常被开发人员遗漏的编码准则,那么你可以将这些准则转化为配方--使开发人员能够自信地应用经批准的代码转换。

如果你有任何问题,我们很愿意听到你的意见在Slack上加入我们:sensei-scw.slack.com

查看资源
查看资源

作者

肖恩-弗拉尼根

想要更多吗?

在博客上深入了解我们最新的安全编码见解。

我们广泛的资源库旨在增强人类对安全编码技术提升的方法。

查看博客
想要更多吗?

获取关于开发者驱动的安全的最新研究

我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。

资源中心

用Sensei 和 AssertJ使单元测试变得可读。

发布日期:2021年12月01日
作者:肖恩-弗拉尼根

开发人员用各种方法创建和测试自己的代码。其中一种方法是单元测试--一种非常流行的测试自己代码中最小部分的方法。如果写得好,单元测试可以帮助提高你的代码质量,并减少成本和开发时间。无论是否作为测试驱动开发(TDD)的一部分,单元测试都是现代开发实践的一个关键部分,其重要性导致了许多测试框架的产生。

但是,如果没有适当的测试框架和指导,单元测试可能会变得复杂和不可读,因为重点转移到覆盖率和数量,而不是质量和可读性。这在一个有许多单元测试的大型活跃代码库中尤其如此。

一个好的测试框架有助于创建良好的可读测试,这些测试是简单的,并注重质量测试。它们也有助于记录使用你的代码的方法。AssertJ就是这样一个框架。

AssertJ是一个流畅的API,用于在Java中编写单元测试。它让你写的测试断言读起来像英语,有上下文感知的自动完成功能。如果你有大量的测试,并需要提高它们的可读性,你可能希望将所有的测试迁移到AssertJ,并确保所有未来的测试都充分利用AssertJ的优势。

但是完整的迁移需要花费巨大的精力和时间来手动完成,所以它经常被跳过或推迟到其他开发任务。因此,我们创建了Sensei - 一个高度可定制的IntelliJ插件,可以帮助迁移你当前的单元测试,以使用AssertJ,并使所有未来的测试以正确的方式编写。这是通过Sensei"开发团队 "已经为你创建的一些配方(规则)完成的。Sensei 使得执行一次性迁移或采取渐进式迁移到AssertJ的方法变得容易,一次一个测试。一旦你迁移到AssertJ,配方将继续帮助开发人员在编写单元测试时应用快速修复,以便你的单元测试在整个代码库中继续保持统一、标准和一致。

如何设置AssertJ有大小规则的视频

关于Sensei

Sensei 是一个高度可定制的IntelliJ插件,可以在输入时扫描和修复不良代码--有数百个可下载的代码转换和迁移配方(规则),以及一个内置的能力来制作你自己的。有了Sensei ,开发人员可以在输入时纠正不良的代码模式,这样他们就可以更快地交付高质量的代码,并最终以一致和标准的方式跨团队和项目编写代码。

下面是一个迁移样本的例子,也许可以帮助你看到Sensei 是如何使你的单元测试迁移到使用AssertJ时不费吹灰之力。

为什么说AssertJ是编写单元测试的优秀框架?

而不是像这样写一个JUnit断言的测试。

你可以用AssertJ写这个。

这意味着你可以像阅读英文句子一样从左到右阅读断言,而且很清楚哪个是期望值(在这种情况下,尺寸为3)。你有多少次把断言写错了,像这样?

这些只是简单的例子。你的检查和断言越复杂,AssertJ就越能帮助你使你的测试简单和可读。它与你的IDE的自动完成功能配合得很好。只要你输入

它将弹出所有你可以检查的东西,基于myResult的类型。如果它是一个集合,你可以检查它的内容、大小、是否包含某些值或类型,等等。

AssertJ支持基元和它们的盒式类型、原子类型、集合、数组、地图、日期、java.time、期货、文件/路径、InputStreams、Throwables和URL。如果你有一个喜欢的Hamcrest自定义匹配器,你可以通过HamcrestCondition将其与AssertJ一起使用。

可读的单元测试使开发人员很容易用正常的英语阅读代码,因此很容易发现错误以及增加覆盖率--这使得AssertJ成为良好的Java单元测试不可缺少的框架。

将传统的单元测试转移到AssertJ的配方

我们编写了一本食谱,帮助你用AssertJ编写一致的代码。它可以帮助你将你的断言从这些框架中的任何一个迁移到AssertJ。JUnit 3、JUnit 4、JUnit 5和FEST-Assert。

这个食谱可以在Sensei 中配置,以便立即使用,你可以在这里找到Sensei 的安装说明。

在写代码时写出更好的单元测试--逐步提高JUnit质量

Sensei AssertJ的食谱不只是帮助你从其他框架迁移过来。它有一些食谱,可以帮助你改进你的测试编写,打破旧的习惯,并编写更多的AssertJ测试。

例如,假设你写了一个测试,它看起来像这样。

也许你甚至使用上面的一个迁移配方,从这个JUnit风格的断言中迁移了它。

Sensei AssertJ的食谱有一个配方,也可以检测到这种老式的断言,并提出将其转换为这种断言。

另一个配方可以从以下方面进行转换。

到这一点。

一次性迁移和跨团队的统一编码实践--与Sensei

从上面的例子我们可以看出,手动迁移单元测试到使用AssertJ会涉及到大量的精力和时间,而这些时间最好用在编写更好的测试上。通过使用Sensei ,你可以轻松地将你的单元测试迁移到AssertJ上,而且很有信心。你可以执行一次性迁移,或者在遇到个别测试时将其迁移到AssertJ。Sensei ,提供这种灵活性,使代码迁移不那么痛苦。

单元测试迁移只是许多方法中的一个例子,Sensei ,可以用来在你的项目中编写一致的代码。你可以随时注意在拉动请求中或自己编码时经常遇到的反模式或某些手动代码转换。如果你有一套经常被开发人员遗漏的编码准则,那么你可以将这些准则转化为配方--使开发人员能够自信地应用经批准的代码转换。

如果你有任何问题,我们很愿意听到你的意见在Slack上加入我们:sensei-scw.slack.com

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

提交
要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。