java - 您如何测试通用 API 的类型安全性?

标签 java api generics testing 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

那么您如何验证您的通用 API 是否在编译时引发了正确的错误?您是否只是构建一个非编译代码套​​件来测试您的库,并将编译错误视为测试成功,反之亦然? (当然你要确认错误是泛型相关的)。

是否有促进此类测试的框架?

最佳答案

由于这不是传统意义上的测试(也就是说,您无法“运行”测试),而且我认为不存在这样的工具,因此我可以提出以下建议:

  1. 定期进行单元测试
  2. 在其中生成代码——正确的代码和错误的代码
  3. 使用Java compiler API尝试编译它并检查结果

您可以为该功能制作一个易于使用的包装器,并将其贡献给有您要求的任何人。

关于java - 您如何测试通用 API 的类型安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6605693/

相关文章:

java - 测试对象是否是特定类型的通用列表

java - 使用堆栈检查分隔符

java - 为什么编译器会在多行中输出单个警告?

java - jtable 中删除具有相同值的多行

json - Instagram 位置端点媒体/最近总是返回空数组

c# - Twitter:在 C# 中验证用户名和密码

c# - 非泛型类中的泛型方法?

swift - 如何通过 Result<Credentials> 类型的实例获取值?

java - 有人可以找出我的代码有什么问题吗?

api - 在不实际访问第三方 API 的情况下测试 Go (Golang) API 传出请求