0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: ddt, kotest, data driven test</p>
1
<p>Теги: ddt, kotest, data driven test</p>
2
<p>Пакет<em>io.kotest.data</em>имеет специальный набор классов и функций, позволяющих организовать<strong>Data Driven Testing</strong>. Давайте создадим простой тест c Data Provider-ом:</p>
2
<p>Пакет<em>io.kotest.data</em>имеет специальный набор классов и функций, позволяющих организовать<strong>Data Driven Testing</strong>. Давайте создадим простой тест c Data Provider-ом:</p>
3
<p>Согласитесь, пример выше выглядит довольно просто. Давайте разложим его по полочкам:</p>
3
<p>Согласитесь, пример выше выглядит довольно просто. Давайте разложим его по полочкам:</p>
4
<ol><li>В начале, как и в обычном тесте, мы определяем контейнер для тестов.</li>
4
<ol><li>В начале, как и в обычном тесте, мы определяем контейнер для тестов.</li>
5
<li>Далее степ<strong>Given server is up</strong>выполнится точно также, как и в обычном тесте, то есть один раз.</li>
5
<li>Далее степ<strong>Given server is up</strong>выполнится точно также, как и в обычном тесте, то есть один раз.</li>
6
<li>Следующий этап -- функция<strong>forAll</strong>. Эта функция принимает наборы<strong>Row</strong>, а также функциональный блок, в котором мы продолжим декларировать шаги нашего теста.</li>
6
<li>Следующий этап -- функция<strong>forAll</strong>. Эта функция принимает наборы<strong>Row</strong>, а также функциональный блок, в котором мы продолжим декларировать шаги нашего теста.</li>
7
<li>Теперь функция row определит 1 набор тестовых данных, необходимых для одной итерации. Кстати, в пакете в файле<em>io.kotest.data.rows.kt</em>есть 22 функции для различного количества данных в одном наборе. Если этого количества вам не хватит, вы можете реализовать свою последовательность в специальном подходе<strong>Property Based Testing</strong>.</li>
7
<li>Теперь функция row определит 1 набор тестовых данных, необходимых для одной итерации. Кстати, в пакете в файле<em>io.kotest.data.rows.kt</em>есть 22 функции для различного количества данных в одном наборе. Если этого количества вам не хватит, вы можете реализовать свою последовательность в специальном подходе<strong>Property Based Testing</strong>.</li>
8
<li>В итоге мы получаем две итерации, причем каждая из них имеет свой набор тестовых данных. Опять же, в каждом наборе, в свою очередь, есть 2 значения. По сути, мы получаем функциональный блок, который будет выполнен два раза.</li>
8
<li>В итоге мы получаем две итерации, причем каждая из них имеет свой набор тестовых данных. Опять же, в каждом наборе, в свою очередь, есть 2 значения. По сути, мы получаем функциональный блок, который будет выполнен два раза.</li>
9
</ol><p>Остается добавить, что есть важнейшее ограничение на имена в рамках контейнера, вследствие чего все имена степов должны быть уникальны. Именно поэтому в шагах добавляются уникальные индексы<strong>[$index]</strong>. Кстати, вы можете обойтись и без индекса, печатая<strong>uuid</strong>в каждом шаге, так как индекс, по сути, применяется лишь для упорядоченности в отчете.</p>
9
</ol><p>Остается добавить, что есть важнейшее ограничение на имена в рамках контейнера, вследствие чего все имена степов должны быть уникальны. Именно поэтому в шагах добавляются уникальные индексы<strong>[$index]</strong>. Кстати, вы можете обойтись и без индекса, печатая<strong>uuid</strong>в каждом шаге, так как индекс, по сути, применяется лишь для упорядоченности в отчете.</p>
10
<p><em>По материалам https://habr.com/ru/company/nspk/blog/520380/.</em></p>
10
<p><em>По материалам https://habr.com/ru/company/nspk/blog/520380/.</em></p>
11
11