繁体   English   中英

在 spock 中模拟 static 方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM