您可以使用例如JUnit 来测试您的库的功能,但您如何测试其关于泛型和通配符的类型安全性?
只有针对可编译的代码进行测试才是“快乐路径”测试;您不应该针对非类型安全使用测试您的 API 并确认这些代码无法编译吗?
// how do you write and verify these kinds of "tests"?
List<Number> numbers = new ArrayList<Number>();
List<Object> objects = new ArrayList<Object>();
objects.addAll(numbers); // expect: this compiles
numbers.addAll(objects); // expect: this does not compile
那么您如何验证您的通用 API 是否在编译时引发了正确的错误?您是否只是构建一个非编译代码套件来测试您的库,并将编译错误视为测试成功,反之亦然? (当然你要确认错误是泛型相关的)。
是否有促进此类测试的框架?
最佳答案
由于这不是传统意义上的测试(也就是说,您无法“运行”测试),而且我认为不存在这样的工具,因此我可以提出以下建议:
- 定期进行单元测试
- 在其中生成代码——正确的代码和错误的代码
- 使用Java compiler API尝试编译它并检查结果
您可以为该功能制作一个易于使用的包装器,并将其贡献给有您要求的任何人。
关于java - 您如何测试通用 API 的类型安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6605693/