pol*_*nts 5 java generics testing api type-safety
您可以使用例如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
Run Code Online (Sandbox Code Playgroud)
那么如何验证您的通用API在编译时引发了正确的错误?您是否只是构建一个非编译代码来测试您的库,并将编译错误视为测试成功,反之亦然?(当然你必须确认错误是与泛型相关的).
是否有促进此类测试的框架?
由于这不是传统意义上的测试(即 - 你不能"运行"测试),我不认为这样的工具存在,这就是我的建议:
您可以为该功能制作一个易于使用的包装器,并为符合您要求的任何人提供帮助.
听起来您正在尝试测试Java编译器,以确保在分配错误类型时(而不是测试您自己的api)会引发正确的编译错误.
如果是这种情况,为什么你不关心编译器在将Integers分配给String字段时没有失败,以及当你在尚未初始化的对象上调用方法时,以及编译器应该检查的其他数百万个其他事情时他们编译代码?!