Совместное использование кода между функциями в рамках спока - PullRequest
0 голосов
/ 06 мая 2018

Я использую спок для теста.

Для спецификации S у меня есть три различные функции F1, F2, F3.

У меня есть функции с , заданными , , когда , , затем , но я хочу поделиться кодом между , заданным и когда , поскольку это почти то же самое, за исключением , тогда часть

псевдокод:

class S extends Specification {

 def 'f1' () {
   given:
     redundantcode('file1')
   then:
     redundantcode_2_with_no_param
   when:
     valuable_code_1
 }

 def 'f2' () {
   given:
     redundantcode('file2')
   then:
     redundantcode_2_with_no_param
   when:
     valuable_code_2
 }

 def 'f3' () {
   given:
     redundantcode('file3')
   then:
     redundantcode_2_with_no_param
   when:
     valuable_code_3
 }
}

Я ищу способ избежать дублирования кода в заданной и когда часть.

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Возможно, вы ищете подход параметризованного тестирования с использованием таблиц данных или каналов данных? Тестирование на основе данных

Например, вы можете сделать:

def 'f1' () {
 when:
   redundantcode(fileName)
 then: 
   redundantcode_with_no_param
 then: 
   valuable_code_3
 where: 
   fileName << ['file1', 'file2', 'file3']
 }

Предполагается, что ваш values_code_3 также несколько повторяется. Если у вас есть сравнение где-то там, вы можете расширить его, чтобы иметь второе значение в предложении where в «результате << ['Ожидаемый результат1», «ожидаемый результат2», «ожидаемый результат3»] и т. Д. И т. Д. </p>

0 голосов
/ 06 мая 2018

Вы можете просто написать метод в своем тестовом классе. E.g.:

void redundantcode_2_with_no_param() {…}

Обратите внимание, что если вы используете "def" вместо "void", все, что будет возвращать последняя строка в вашем методе, будет возвращено из метода. Это может привести к провалу теста, если он пуст.

...