我有一个由数千个班级组成的大型项目。今天我发现对于某些输入,在启用断言的情况下运行时会计算出不同的结果。
由于断言本身不会引发 AssertionError (我已经在该错误上设置了断点),这意味着隐藏在代码中的某处是具有不需要的副作用的断言语句。问题是我不知道我的 >100 个断言中的哪一个导致了问题。
由于 assert 在 Java 中不是方法而是关键字,所以我不知道如何设置每次调用 assert 时都会命中的断点。
我发现的可能的解决方法:
- 逐一注释掉断言并运行程序最终找到罪魁祸首。
- 使用像eclEmma这样的代码覆盖工具运行我的测试用例,以过滤掉一些断言语句。
- 仅对某些包启用断言以缩小可能是原因的断言的数量。
- 进行搜索和替换(使用正则表达式)以通过实用方法替换断言,我可以在其中放置断点。
尽管如此,我想知道是否有人知道打破断言的方法,即使条件评估为真。