Данные испытаний относятся к тому месту, где он не был жестко закодирован в методе испытания (функции).
Один из грубых способов увидеть это - думать о тесте (исключая блок где), как метод с некоторым количеством параметров - 2 в вашем случае, имя и длина. И затем поймите, что предложение where просто предоставляет значения данных для тестового бегуна для использования при вызове вашего тестового метода.
Спок использует Groovy магию, чтобы превратить
def "test length of names"() {
expect:
name.size() == length
where:
name | length
"Spock" | 5
"Java" | 4
}
во что-то примерно как
def test_length_of_names(name, length) { // note the arguments
assert name.size() == length
}
, а затем говорит тест бегун назвать тест один раз для каждой строки в ИНЕКЕ
test_length_of_names("Spock", 5)
test_length_of_names("Java", 4)
Этот подход
- обеспечивает хорошее разделение задач между тест логики и данных испытаний
- позволяет относительно общие тесты для повторного использования в широком диапазоне входных и краевых случаев
- позволяет избежать дублирования тестового кода
- поддерживает дизайн тест стиль, который заслуживает тестирования, основанного на имени.
Это объяснение не содержит нескольких деталей, таких как создание экземпляра спецификации для каждого теста, обновление имени каждого вызова теста и вызов различных методов настройки и очистки.
Для получения более подробной информации см. the Spock documentation.
Да данные «_where_» находится вне теста функции, но все же как лексические функции макета Спока он _appears_ внутри функции. Кстати, эта ссылка на «Spock documentation» нарушена. Что касается предложения «* where» * - мне нужен механизм для повторного использования данных. (Скажем), что 'Where' был интерфейсом, который позволял' private Where getTestData() {...} 'возвращать таблицу where из примера Anuj. И, конечно же, я бы предпочел иметь аккуратный синтаксис таблицы. Спасибо за очень четкое объяснение. – will
Ссылка на документацию исправлена. Спасибо что подметил это. –