В Scala есть несколько хороших библиотек для тестирования ( Спецификации , ScalaTest , ScalaCheck ). Однако с помощью мощной системы типов Scala важные части API, разрабатываемого в Scala, выражаются статически, обычно в форме нежелательного или недопустимого поведения, предотвращаемого компилятором.
Итак, каков наилучший способ проверить, предотвращается ли что-то компилятором при проектировании библиотеки или другого API? Неудобно комментировать код, который должен быть некомпилируемым, а затем раскомментировать его для проверки.
Придуманный пример тестирования Список:
val list: List[Int] = List(1, 2, 3)
// should not compile
// list.add("Chicka-Chicka-Boom-Boom")
Одна из существующих библиотек тестирования обрабатывает подобные случаи? Есть ли подход, который люди используют, который работает?
Подход, который я рассматривал, заключался в том, чтобы встроить код в строку с тройными кавычками или элемент xml и вызвать компилятор в моем тесте. Код вызова выглядит примерно так:
should {
notCompile(<code>
val list: List[Int] = List(1, 2, 3)
list.add("Chicka-Chicka-Boom-Boom")
</code>)
}
Или что-то похожее на сценарий ожидаемого , вызываемый интерпретатором.