我正在使用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代码中的任何想法?
答案 0 :(得分:1)
这个答案困扰了我好几天,我搜索并寻找答案。在寻求帮助后十五分钟,我找到了答案。所以对于碰到这个问题的其他人来说,这是我的解决方案 - 这都归功于这个答案:https://stackoverflow.com/a/4852727/2601060
简而言之,当JMockit重新定义类时,将删除断点。解决方案是在测试中设置一个断点,一旦调试器在测试中停止,那么 THEN 在Java代码中设置断点。
并且非常高兴......