2014-12-11 2 views
3

Я хочу сделать несколько тестов, которые имеют определенную зависимость друг от друга. Из-за этого, У меня есть один «главный» -тест, который должен вызывать другие тесты. Здесь не два примера классы:Повторное использование тестовых классов в других тестах

@Stepwise 
public class TestClass extends GebReportingSpec{ 
NotAutomaticExecutedIT test = new NotAutomaticExecutedIT(); 

def "anderen Test aufrufen"() { 
    given: 
     test."test"() 
    when: 
     def wert = true 
    then: 
     wert == true 

} 

} 

и

@Ignore 
public class NotAutomaticExecutedIT extends GebReportingSpec { 

def "test"() { 
    given: 
     def trueness = true; 
    when: 
     def argument = true; 
    then: 
     argument != trueness; 
} 
} 

Если я запустить тест, я получаю следующее исключение:

groovy.lang.MissingFieldException: Нет такого поля: $ spock_sharedField__browser для класса: org.codehaus.groovy.runtime.NullObject на geb.spock.GebSpec.getBrowser (GebSpec.groovy: 40) на geb.spock.GebSpec.methodMissing (GebSpec.groovy: 54)в org.gkl.kms.webapp.tests.BestellungenIT.anderen Test aufrufen (TestClass.groovy: 16)

Возможно ли это сделать?

ответ

1

Ошибка в том, что вы вызываете поле test, которое не является статическим и не аннотируется @Shared. Я не уверен на 100%, что вы пытаетесь сделать, будет работать, даже если вы добавите аннотацию @Shared.

Что бы я сделал, это перевести общую тестовую логику на вспомогательные функции. Это функции, которые не используют spock, когда/then блокируют, но вместо этого просто используют assert. Поместите эти вспомогательные функции в суперкласс и все спецификации, которые будут использовать его, расширяют этот класс. Затем вы можете сделать что-то вроде:

public class AutomaticSpec extends BaseSpec{ 

    def "This is a test"(){ 
    when: 
     def x = some value 
    then: 
     super.helperFunction(x) //super not needed here, just for clarity 
    } 
} 

и базовой спецификации:

public class BaseSpec extends GebReportingSpec{ 
    def helperFunction(x){ 
     assert x == some condition 
     true 
    } 
} 

С помощью этой установки вы должны иметь возможность использовать общую логику в нескольких тестах.

EDIT: Помощники должны использовать assert вместо того, чтобы возвращать false для отказа, чтобы сохранить отчет об ошибках spock.

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