gpt4 book ai didi

groovy - JMockit MockUp 在 Spock 测试之间持续存在

转载 作者:行者123 更新时间:2023-12-01 12:38:05 25 4
gpt4 key购买 nike

我正在使用用 Groovy 编写的 Spock 测试来测试一些 Java 代码。我使用 JMockit 来模拟 java 代码中的方法,因为 Spock 只处理模拟 Groovy 类。我遇到了一个问题,即 JMockit MockUp 在测试之间持续存在。这样的模拟实例应该只存在于测试中(根据 JMockit 文档),但这不起作用,我想这是因为它没有使用 JMockit 测试运行器,而是使用 Spock 测试运行器。

这是我面临的问题的最简单示例。我有一个返回字符串的简单方法,我可以使用 MockUp 更改该方法的返回值,但它仍然存在于第三次测试中,不希望它被使用。

Java 类

public class ClassToTest {
public String method() {
return "original";
}
}

Spock 测试
class ClassToTestSpec extends Specification {
void "first test"() {
when:
String result = new ClassToTest().method()

then:
result == "original"
}

void "second test"() {
setup:
new MockUp<ClassToTest>() {
@Mock
public String method() {
return "mocked"
}
}

when:
String result = new ClassToTest().method()

then:
result == "mocked"
}

void "third test"() {
when:
String result = new ClassToTest().method()

then:
result == "original"
}
}

第三个测试失败,因为 ClassToTest.method() 仍然返回字符串“mocked”而不是“original”。我使用调试器验证了 Mocked 方法被调用了两次。

问题

有没有办法手动删除 JMockit 中的类 MockUp?谢谢。

最佳答案

您可以在创建的模型对象上调用 MockUp.tearDown 方法,以手动撤消其效果。

关于groovy - JMockit MockUp 在 Spock 测试之间持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27724875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com