2013-09-22 2 views
2

Когда я запускаю тесты в Junit, их заказ не гарантируется. По умолчанию specs2 запускает параллельные примеры, поэтому заказ не гарантируется здесь. Однако, если я добавляю ключевое слово sequential, тесты выполняются (по крайней мере, из того, что кажется) в порядке. Есть ли способ получить последовательное поведение, но примеры выполняются в случайном порядке?Specs2 последовательное ключевое слово

ответ

0

Как насчет украшения или упаковки тестовых примеров с кодом, который получает блокировку в начале каждого тестового примера? Хакки, возможно, но должны работать надежно и легко реализовать, пока/если вы не найдете более подходящую альтернативу.

+0

Я интересно, если библиотека предлагает что-то вроде этого не так, как это сделать Это. – netta

+0

В этом нет никакого средства в specs2, но я мог бы добавить «крючок» к бегуну sbt, чтобы вы могли работать с любым «репортером». Затем вы можете переопределить черту 'ExecutionStrategy', которая выполняет примеры, чтобы они выполнялись случайным образом. Другой подход заключается в том, чтобы вы могли генерировать тесты из метода, который бы скремблировал их при каждом запуске. – Eric

+0

Дело в том, что я хочу создать стандарт, потому что я не хочу, чтобы разработчики писали тесты, зависящие от порядка. Было бы неплохо, если бы существовало ключевое слово, подобное последовательному, где тесты выполнялись один раз, но не в определенном порядке (например, в junit). – netta

2

Вы можете использовать последнюю версию specs2 2,3-SNAPSHOT с random аргументом командной строки (или args.execute(random=true) внутри спецификации):

class TestSpec extends Specification { def is = s2""" 

    test1 $e1 
    test2 $e2 
    test3 $e3 

    """ 

    def e1 = { "starting e1".pp; Thread.sleep(30); "e1".pp; ok } 
    def e2 = { "starting e2".pp; Thread.sleep(20); "e2".pp; ok } 
    def e3 = { "starting e3".pp; Thread.sleep(40); "e3".pp; ok } 
} 

sbt> testOnly *TestSpec* -- random 

starting e3 
e3 
starting e2 
e2 
starting e1 
e1 
[info] TestSpec 
[info] 
[info] + test1 
[info] + test2 
[info] + test3 
[info] 
+0

Что касается изменчивого Спецификация – netta

+0

более конкретно, mutable.SpecificationWithJUnit – netta

+0

, пожалуйста, попробуйте, он также должен работать. – Eric

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