当前位置: 首页 > 知识库问答 >
问题:

Groovy/Spock可以在Kotlin中同时模拟方法和接口实现吗?

金嘉
2023-03-14

mocked类定义如下:

interface SomeInterface {
    val somethingCommon: String
}
class SomeClass(val somethingSpecific: String) : SomeInterface {
    override val somethingCommon: String
      get() = somethingSpecific
}
def thing = Mock(SomeClass)
thing.somethingSpecific >> "blah"
thing.somethingCommon >> "blah"

在Kotlin/Groovy/Spock中有没有一种方法可以避免对这两种方法进行存根处理?我想出的最好办法是用另一个来存根,这很有效,但很不幸:

def thing = Mock(SomeClass)
thing.somethingSpecific >> "blah"
thing.somethingCommon >> thing.somethingSpecific

共有1个答案

桓兴腾
2023-03-14

您描述的行为是一个间谍,如果您没有指定任何返回值,模拟将返回null

Spock只能模拟非final类/方法,但是您可以使用https://github.com/joke/spock-mockable动态地打开它们进行测试。

 类似资料:
  • 我试图为一个类编写一个单元测试,这个类使用带有库中的的Google vision API。问题是,由于某种原因,我的模拟仍然调用真正的方法,然后抛出一个NPE,这破坏了我的测试。我以前从未在模拟上见过这种行为,我想知道我是不是做错了什么,是不是Spock/Groovy中有bug,还是与Google lib有关?

  • 所以我想做一些事情 但我得到了空异常

  • 在Java,你可以做这样的事情: 在Kotlin有可能做同样的事情吗?假设是抽象的,并且不实现

  • 问题内容: 我想拥有一个在Java中同时实现Map和List接口的对象。这个想法与以下问题类似:Java OrderedMap 我想将名称/值对添加到列表中,并让列表保留序列,但还可以按名称进行查找: 这是问题所在:创建此类时: 我收到一个编译错误: 如果我没有实现Map和List接口,那么有很多Java集合方法无法在此数据结构上使用。 (此外,上面的Java Ordered Map中提出的解决方

  • 我目前正在为一个groovy应用程序编写单元testcase 有人能告诉我这是不是嘲弄斯波克的两个电话的正确方法?如果没有,那么请引导我走向正确的解决方案。