如何编写单元测试以从 Operation return 类型的 Mock 方法中抛出异常?
How do I write a unit-test to throw an exception from the Mock method of Operation return type?
我想编写一个单元测试来从操作 return 类型的 Mock 方法中抛出异常。
我正在 Groovy.
中使用 Spock 编写单元测试
有class个甲,还有个乙
// class A
private ClassB b;
Promise<String> foo() {
return b.methodX()
.nextOp(s -> {
return b.methodY();
});
}
Return methodP()
的类型是 Promise<>
Return methodO()
的类型是 Operation
// class B
public Promise<String> methodP() {
return Promise.value("abc");
}
public Operation methodO() {
return Operation.noop();
}
Class A 的 foo() 方法的单元测试
在单元测试中模拟 ClassB
// Spock unit-test
ClassA a = new ClassA()
ClassB b = Mock()
def 'unit test'() {
given:
when:
execHarness.yield {
a.foo()
}.valueOrThrow
then:
1 * b.methodP() >> Promise.value("some-string")
1 * b.methodO() >> new Exception("my-exception")
Exception e = thrown(Exception)
e.getMessage() == "my-exception"
}
我预计会抛出异常,但抛出 GroovyCaseException 并且测试失败。
错误消息说,
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'java.lang.Exception: my-exception' with class 'java.lang.Exception' to class 'ratpack.exec.Operation'
更改此行:
1 * b.methodO() >> new Exception("my-exception")
于:
1 * b.methodO() >> { throw new Exception("my-exception") }
因为 methodO()
预计不会 return Exception
实例(如您的示例所示),但预计会 抛出(通过使用闭包)。
我想编写一个单元测试来从操作 return 类型的 Mock 方法中抛出异常。
我正在 Groovy.
中使用 Spock 编写单元测试有class个甲,还有个乙
// class A
private ClassB b;
Promise<String> foo() {
return b.methodX()
.nextOp(s -> {
return b.methodY();
});
}
Return methodP()
的类型是 Promise<>
Return methodO()
的类型是 Operation
// class B
public Promise<String> methodP() {
return Promise.value("abc");
}
public Operation methodO() {
return Operation.noop();
}
Class A 的 foo() 方法的单元测试 在单元测试中模拟 ClassB
// Spock unit-test
ClassA a = new ClassA()
ClassB b = Mock()
def 'unit test'() {
given:
when:
execHarness.yield {
a.foo()
}.valueOrThrow
then:
1 * b.methodP() >> Promise.value("some-string")
1 * b.methodO() >> new Exception("my-exception")
Exception e = thrown(Exception)
e.getMessage() == "my-exception"
}
我预计会抛出异常,但抛出 GroovyCaseException 并且测试失败。
错误消息说,
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'java.lang.Exception: my-exception' with class 'java.lang.Exception' to class 'ratpack.exec.Operation'
更改此行:
1 * b.methodO() >> new Exception("my-exception")
于:
1 * b.methodO() >> { throw new Exception("my-exception") }
因为 methodO()
预计不会 return Exception
实例(如您的示例所示),但预计会 抛出(通过使用闭包)。