[英]Mock static method in spock
我尝试在 spock 中使用 mockito-inline 模拟 static 方法
given:
try(MockedStatic<CryptoUtils> mockedStatic = Mockito.mockStatic(CryptoUtils.class)){
mockedStatic.when({ -> CryptoUtils.decryptWithPrefixIV(any() as String, any() as String) }).thenReturn(word)
}
但这不起作用 --- 当前版本不支持对资源进行“尝试”
从技术上讲,您可以在 spock 测试中尝试使用资源,
Groovy 3+ 支持 try..with..resources: ARM Try with resources
和斯波克拉 Groovy 3:见https://spockframework.org/
测试编译“org.spockframework:spock-core:2.0-groovy-3.0”
另一方面,mockStatic 仅在它关闭的那一刻才处于活动状态,它不与 Spock 的块组成。 因此, 清理块的使用可能是首选
与清理方法一样,它用于释放特征方法使用的任何资源,即使特征方法(前一部分)产生异常也会运行。 因此,必须对清理块进行防御性编码; 在最坏的情况下,它必须优雅地处理特征方法中的第一条语句抛出异常的情况,并且所有局部变量仍然具有它们的默认值。
class Test {
static max(int a, int b) {
return Math.max(a, b)
}
}
def "testMockStatic"() {
given:
var mockedStatic = Mockito.mockStatic(Test.class)
mockedStatic.when({ -> Test.max(2, 3) }).thenReturn(10)
expect:
Test.max(2, 3) == 10
cleanup:
mockedStatic.close()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.