Вы можете использовать, например, 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 повышает правильные ошибки во время компиляции? Вы просто создаете набор, не компилирующий код, чтобы протестировать свою библиотеку, и считаете ошибку компиляции успешной, и наоборот? (Конечно, вы должны подтвердить, что ошибки связаны с обобщениями
Существуют ли фреймворки, которые облегчают такое тестирование?