使用ant build

时间:2016-02-18 18:43:22

标签: ant junit spock

我正在和Spock一起编写单元测试。我想使用spock检查数组的所有元素

when: then:

块。我从接受的答案中找到了语法here。并基于此我写了这样的东西 -

then:    
myArray.every { (it >= 0) && (it < 10) }

这适用于IntelliJ,但是当我使用Ant构建测试时,它会失败。

Ant和groovy设置 - 取自here。我可以看到它适用于像myArray.length == 8这样的简单条件。

Groovy版本 - 2.4.5

Spock版本 - spock-core-1.0-groovy-2.4.jar

JDK 1.8

Ant 1.9.6

错误 -

[junit] Testcase: initializationError took 0 sec
[junit]     Caused an ERROR
[junit] Test class should have exactly one public zero-argument constructor
[junit] java.lang.Exception: Test class should have exactly one public zero-argument constructor
[junit]     at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
[junit]
[junit] Testcase: initializationError took 0 sec
[junit]     Caused an ERROR
[junit] No runnable methods
[junit] java.lang.Exception: No runnable methods
[junit]     at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
[junit]
[junit] Test package.MyTest$__spock_feature_0_0_closure1 FAILED

在查看由ant build创建的类文件时,我看到了

public void $spock_feature_0_0(Object obj){
...
...
class __spock_feature_0_0_closure1 extends Closure implements GeneratedClosure {
}
...
...
new __spock_feature_0_0_closure1()
}

所以看起来使用Reflection无法访问闭包!!有什么想法吗? 我的蚂蚁groovy配置是否搞砸了(正如我之前所说,更简单的测试对我有用,所以我希望不会!)?或者我只是期待Spock的过多。

场景的一个例子 -

public class SpockTest extends Specification{

public def "example"(){
    given:
    int[] arr = new int[5];
    when:
    arr[0] = 1;

    then:
    arr.every { (it >= 0) }
}
}

junit下面也无法运行相同的错误 -

public class TestClass {
 public int test1() {
   class testInner {//local class
     int a = 100;
     public int getA() {
       return a;
     }
   }
 return new testInner().getA();
 }
 @Test
 public void test2() {
   System.out.println(test1());
   assert 100 == test1();
 }
}

更新(29-Feb-16) - 到目前为止的讨论中,似乎问题出在Ant身上。只有使用/编译到本地类的junit和groovy / Spock测试才会出错。更简单的案例工作正常。

0 个答案:

没有答案