我在测试设置中有以下内容:
def originalPostAsXml = RestClient.&postAsXml
RestClient.metaClass.'static'.postAsXml = {
String uriPath, String xml ->
return 65536
}
并在测试清理中:
RestClient.metaClass.'static'.postAsXml = originalPostAsXml
但是当下一个测试运行时,当它尝试执行 RestClient.postAsXml 时,它会遇到 StackOverflowError:
at groovy.lang.Closure.call(Closure.java:282)
看起来 RestClient.postAsXml 递归地指向自身。重置模拟静态方法的正确方法是什么?
在单元测试中,我经常将元类设置为null
in the tearDown()
这似乎允许类在没有我修改的情况下像原来一样工作。
example:
void setUp() {
super.setUp()
ServerInstanceSettings.metaClass.'static'.list = {
def settings = [someSetting:'myOverride'] as ServerInstanceSettings
return [settings]
}
}
void tearDown() {
super.tearDown()
ServerInstanceSettings.metaClass.'static'.list = null
}
如果您使用的是 JUnit4,您可以使用@AfterClass
相反,在这种情况下,这也许更有意义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)