Как повторно использовать значение для описания * и * соответствия в Specs2? - PullRequest
2 голосов
/ 20 октября 2011

В настоящее время я использую |> из scalaz для достижения следующего:

(4 |> (s => (s + " is smaller than 10" ! (s < 10 must beTrue)))

Это позволяет мне повторно использовать .toString объекта в описании контрольного примера. Но поскольку Specs2, похоже, поддерживает такие сложные вещи, как извлечение данных из источника тестов путем сканирования папки src, они должны были подумать об этом конкретном случае использования.

Есть также вещи Given, When, Then, но они выглядят чрезвычайно многословно.

Так как же использовать один и тот же объект для описания и сопоставления? Я думаю, что мое решение приемлемо, но скобки меня беспокоят. На самом деле это выглядит так:

(Set((1,2),(3,4)) |> (s => s + " has Set(1,2) as component of 1" ! (graph.componentOf(s,1) must_== Set(1,2)))) 

1 Ответ

2 голосов
/ 21 октября 2011

Когда тело примера очень близко к описанию, вы можете просто использовать " auto-examples ":

"some examples"     ^
{ 4 must be_<(10) } ^
{ 5 must be_<(10) }

В этом случае тело примеранепосредственно используется как описание при выполнении с sbt:

[info] some examples
[info] + 4 must be_<(10)
[info] + 5 must be_<(10)

Обратите внимание, что я записал ожидания как 4 must be_<(10) вместо (4 < 10) must beTrue, потому что сообщение об ошибке будет более явным, если что-то пойдет не так:

14 is not less than 10
        vs
the value is false

Если вы хотите дополнить сообщение об ошибке еще большей информацией, вы также можете использовать оператор aka:

 (4 < 10) aka "four < ten" must beTrue

Наконец, существует более простая версия Given-When- Тогда вы можете просто повторно использовать описание примера :

 "4 is smaller than 10" !  { (s: String) => 
   s.split(" ").head.toInt must be_<(10) 
 }
...