我可以在单元测试中检查注释的存在吗?


9

我有一个由抽象类及其N个扩展组成的Java类层次结构。在抽象类中,我有一个使用@Remove注释进行注释的方法。尽管删除该批注不会导致任何异常,但不会很快失败,但是我们可能会遇到内存异常,因此,我想确保如果此批注在某些重构中消失,我们会尽快注意到。

我正在尝试创建GUTS(好的单元测试),因此我认为我可以在测试中记录该“技术要求”,并附带说明其的测试用例。

但这不是功能,它是实现的详细信息,并且没有与方法的行为链接(该方法可以为空,但是必须存在并且必须进行注释)。

是否可以为此创建测试,还是有其他方法可以检查此批注的存在?


1
您是在问如何做,还是做一个好的软件工程实践?后者的答案是肯定的。测试可以验证代码库的质量;他们不一定检查当前的行为。进行测试以验证旨在培养未来良好行为的条件是非常好的。
Kilian Foth,2015年

Answers:


5

是的,创建一个单元测试。您是说,如果删除了注释,那么您可能会摆脱生产中的内存错误。那将是一个致命的错误。由于某种认为应该以某种方式限制测试的想法而让这种情况发生会适得其反。测试应从所有方面检查正确性。越早发现可能的问题越好,因此进行单元测试和使CI构建失败会是防止该错误的可靠方法。试图发明另一种机制来防止引入此类错误似乎并不值得。每个新开发人员都必须获得关于如何处理无功能正确性测试的“特殊情况”的解释。这很可能不是很好地利用开发人员时间。

执行BDD的编辑团队可能会将业务功能测试与技术测试(例如性能测试)分开。通常,团队具有不同类型的测试,包括集成测试,其运行频率低于其核心业务逻辑测试。这通常是通过构建配置文件完成的,因此开发人员可以在提交代码之前频繁运行快速的业务逻辑测试,而运行较慢的集成测试。CI构建将运行所有测试。


2

当使用这样的声明性技术实现关键功能时,我倾向于使用集成测试,该集成测试包括识别声明的框架部分。这可以保护您免受框架行为的更改,对声明效果的误解等。仅测试注释的存在并不能保证任何特定的行为。


嗨!这很有趣,例如,您将如何检查@remove批注的行为?
JSBach 2015年

不幸的是,我对EJB不够熟悉,无法回答这个问题-我倾向于避免使用该技术,因为我发现很难为其编写良好的测试。
Jules

这个注释的思想是告诉容器可以删除该bean。不幸的是,很难测试这种行为:(
JSBach 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.