#scala #unit-testing #automated-tests
Вопрос:
test("Comparison") {
val list: List[String] = List("Thing", "Entity", "Variable")
val expected: List[String] = List("Thingg", "Entityy", "Variablee")
var expectedPosition = 0
for (item <- list) {
assert(list(expectedPosition) == expected(expectedPosition))
expectedPosition = 1
}
}
В Scala, чтобы сделать мои низкоуровневые тесты кода более читабельными, я подумал, что было бы неплохо просто использовать одно утверждение, чтобы оно повторялось по циклу и в конце увеличивало накопитель.
Это делается для проверки нескольких входных данных одновременно, когда несколько входных данных будут более или менее иметь одинаковые атрибуты. Когда утверждение терпит неудачу, оно возвращается как «Вещь []», не равная «Вещи[g]». Вместо того, чтобы сообщать об ошибке элемента в списке, есть ли способ заставить его напрямую указать позицию в списке без объединения позиции в списке перед утверждением или с помощью условного оператора, возвращающего позицию в списке? Как будто я предпочел бы, чтобы все это содержалось в отчете об ошибке assert ().
Комментарии:
1.
assert
принимает необязательный строковый аргумент, в который можно включить дополнительную информацию
Ответ №1:
val expected: LazyList[String] = ...
expected.zip(list)
.zipWithIndex
.foreach{case ((exp,itm),idx) =>
assert(exp == itm, s"off at index $idx")
}
//java.lang.AssertionError: assertion failed: off at index 0
expected
ленив, так что его пересекают только один раз, хотя он дважды застегивается.