2016-11-15 2 views
0

Учитывая, что я хочу проверить свой метод с двумя параметрами: один должен привести к успеху, а другой - к исключению.Спок: тестирование падений и успешных вызовов в одной функции?

Дать что-то вроде ..

when: 
myObject.myMethod(value); 

then: 
result 

where: 
value  | result 
new Good() | notThrown(Exception) 
new Bad() | thrown(Exception) 

.. невозможно в Спока.

Как это исправить и не писать два отдельных метода?

+2

Почему вы хотите, чтобы избежать отдельных тестов? Помните, что каждый тест (метод) должен проверять * одно и только одно поведение *. Успешное выполнение и выдача ошибки - это два фундаментальных разных поведения с (надеюсь) различными предпосылками. Поэтому у них действительно должен быть собственный тест! –

+0

Тимоти, с одной стороны, вы правы, с другой стороны - если мы используем предложение «где» в Споке, мы уже тестировали многие поведения в одном тесте. Если считается, что можно проверить многие входящие параметры по сравнению со многими исходящими параметрами, то почему его неправильно тестировать многие входящие параметры по сравнению с исходящими параметрами И исключениями? – MiamiBeach

+1

Одним из больших преимуществ unittest является то, что вы можете сказать по имени метода тестирования, что пошло не так. Но это возможно только в том случае, если у каждого метода тестирования есть только одна причина неудачи. Тестирование с помощью нескольких входов * может * следовать этому правилу, но тестирование сценария «счастливый день» и обработка исключений - нет. –

ответ

0
import spock.lang.* 

class MyFirstSpec extends Specification { 

    def "let's try this!"() { 
     when: 
     new Test().method('Good') 

     then: 
     noExceptionThrown() 

     when: 
     new Test().method('Bad') 

     then: 
     thrown(Exception) 
    } 

    class Test { 
     def method(String param) { 
      if(param == 'Good') { 
       return param 
      } 

      throw new Exception() 
     } 
    } 
} 

Попробуй here

+0

также не желательны не все подходы, которые являются технически возможными. Этот ответ приводит TO к неправильному направлению! –

+0

Thats ok, но могу ли я сделать это через where clause? – MiamiBeach

+1

№ ** _ Простота - это высшая сложность _ **. Лучше всего использовать разные тесты, как указано в других комментариях. Я ответил на вопрос с одной возможной возможностью. Программное обеспечение для упрощения работы больше не является нормой. Сделайте тесты доступными для разработчика не для компилятора. – dmahapatro

Смежные вопросы