gpt4 book ai didi

java - 调试使用 Spock 和 JMockit 测试的 Java 代码

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:57 24 4
gpt4 key购买 nike

我正在使用 Spock 为 Java 应用程序编写测试。该测试包括该类的 JMockit MockUp。当调试测试(使用 IntelliJ)时,我希望能够单步执行 Java 代码。我意识到使用 F5 来单步执行代码是行不通的,因为所有 Groovy 魔法都在进行反射。不幸的是,即使我在Java代码中设置断点,它仍然不会被命中,即使它运行了代码。

这是要测试的代码:

public class TestClass {

private static void initializeProperties() {
// Code that will not run during test
}

public static boolean getValue() {
return true; // <=== BREAK POINT SET HERE WILL NEVER BE HIT
}
}

这是测试代码:

class TestClassSpec extends Specification {

void setup() {
new MockUp<TestClass>() {
@Mock
public static void initializeProperties() {}
}
}

void "run test"() {
when:
boolean result = TestClass.getValue()

then:
result == true
}
}

测试通过,一切正常,但我无法调试 Java 代码。

注意:如果不使用 JMockit MockUp,我可以进行调试,但这是在生产代码中测试 private static 方法所必需的。

关于如何让调试器在使用 JMockit 的 Spock 测试中停止在 Java 代码中,有什么想法吗?

最佳答案

这个答案困扰了我好几天,我一直在寻找答案。发帖寻求帮助后十五分钟,我找到了答案。因此,对于遇到此问题的其他人,这是我的解决方案 - 这全归功于这个答案:https://stackoverflow.com/a/4852727/2601060

简而言之,当 JMockit 重新定义类时,断点被移除。解决方案是在测试中设置断点,一旦调试器在测试中停止,那么在 Java 代码中设置断点。

大家都很高兴......

关于java - 调试使用 Spock 和 JMockit 测试的 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28594487/

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