Spock'throw new Exception()'功能不起作用

时间:2018-09-01 18:55:38

标签: spock

我试图在Spock中使用{throw new Exception()},但是在运行测试时,它会打印在报告中-

”发生了以下问题:     类型为“ java.lang.Exception”的预期异常,但未引发任何异常”

package testing

import spock.lang.Specification

class MyFirstSpec extends Specification {
    def "Test_One" (){

                given:              
                    def obj = new SpockMethodsPlaceholder()
                    obj.returnAge(0) >> {throw new Exception("invalidAge")}
                when:
                    1*obj.returnAge(0)
                then:
                    Exception ex = thrown()
                    ex.getMessage() == "invalidAge"

            }

        class SpockMethodsPlaceholder {
            def "returnAge" (int age){
                return age
            }
        }   
}

我的代码有问题吗?

下面是测试运行的堆栈跟踪---

工作目录: Gradle用户主页:/home/mafia/.gradle Gradle分发:来自目标构建的Gradle包装器 摇篮版本:4.3 Java主页:/ usr / lib / jvm / java-8-oracle JVM参数:无 程序参数:无 启用构建扫描:false 启用脱机模式:false 测试:testing.MyFirstSpec

:compileJava更新日期 :compileGroovy NO-SOURCE :processResources NO-SOURCE :UPS-TO-DATE :compileTestJava :compileTestGroovy :processTestResources NO-SOURCE :testClasses :test

testing.MyFirstSpec> Test_One失败     MyFirstSpec.groovy:16上的org.spockframework.runtime.WrongExceptionThrownError

1个测试完成,1个失败 测试失败。请参见以下报告:file:///media/mafia/A08200E98200C62E/Study/Git_Repo/GIT_JAVA/workbench/SpockProject/build/reports/tests/test/index.html

19s成功建成 4个可执行的任务:3个已执行,1个是最新的

1 个答案:

答案 0 :(得分:1)

您似乎误解了存根/模拟的概念

到底要测试什么?类SpockMethodPlaceholder?在这种情况下,不应对其进行“测试中的类”的模拟/添加-您检查并希望对其起作用的代码(如果需要,可以使用此类方法中的代码)

另一方面,如果您使用>>语法,则可能确实想存根。

所以这是一个更好的例子:

public class SomeClass {
   public int return getAge(int age) {
     if(age <= 0) {
         throw new IllegalArgumentException("too young");
     } else {
       return age;
     }
   }
}


class SomeClassTest extends Specification {

  def "an exception is thrown if the person is too young" () {
     given:
       def subject = new SomeClass()
     when:
        subject.getAge(-1)
     then:
        def ex = thrown(IllegalArgumentException)
        ex.message == "too young" 
  }
}