我需要模拟一个 GrailsControllerClass 接口(interface)。实例应该定义一个静态变量。问题是 MockFor 和 StubFor 没有给你添加静态成员的选项。
因此,我编写了扩展 GrailsControllerClass 的抽象类
abstract class MyController implements GrailsControllerClass {
static myDefinition = [name:"item1", action:"action1"]
}
现在,MockFor 和 StubFor 引发错误:groovy.lang.MissingMethodException: No signature of method: groovy.util.ProxyGenerator.instantiateAggregateFromBaseClass() is applicable for argument types: (java.lang.Class, null) values... 这似乎是报告的错误:https://issues.apache.org/jira/browse/GROOVY-3720
唉,grails 带有 groovy 1.6。
我不想让 MyController 成为一个带有空方法声明的巨大的具体类。有什么选择吗?
最佳答案
尝试
class Tests extends GrailsUnitTestCase {
SUT systemUnderTest = new SUT()
testMocksStaticMethod(){
ClaasToBeMocked mockedClass = new ClassToBeMocked()
mockedClass.staticMethod = [staticMethod: {return "TestValue"}] as ClassToBeMocked
assertEquals("something", systemUnderTest.methodThatCallsStaticMethod())
}
关于unit-testing - 如何在 Grails 中使用静态成员模拟抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1688951/