在其他测试中重用测试类

时间:2014-12-11 10:35:46

标签: java geb

我想做一些对彼此具有特定依赖性的测试。因为这, 我有一个" main" -Test,应该调用其他测试。以下是两个示例类:

@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 for class: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测试aufrufen(TestClass.groovy:16)

不可能这样做吗?

1 个答案:

答案 0 :(得分:1)

错误是因为您调用的字段test不是静态的,并且未使用@Shared进行注释。即使您添加了@Shared注释,我也不能100%确定您尝试做的事情会有效。

我要做的是将常用测试逻辑移动到辅助函数。这些函数在/然后阻塞时不使用spock,而只是使用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
    }
}

通过此设置,您应该能够在多个测试中使用通用逻辑。

编辑:助手应该使用assert而不是为了失败而返回false,以便保持spock的奇特错误报告。