unit-testing - 如何在 Grails 中使用静态成员模拟抽象类?

标签 unit-testing grails groovy mocking

我需要模拟一个 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/

相关文章:

ios - 如何在与默认目标中的数据不同的数据/应用程序(SQLite db、UserDefaults)上运行 Xcode 测试?

grails - 为什么 UserRole 实现 Serializable 并覆盖 equals() 和 hashcode() 方法

configuration - 在Grails中在运行时创建 Camel 路线

groovy - Groovy mixin与Gradle DefaultTask结合使用会导致运行时错误

单元测试 grails 标签

unit-testing - 注入(inject)没有java接口(interface)的模拟对象进行单元测试

java - 如何使用 Java 对自定义日期反序列化器进行单元测试

python - 来自相关对象的 Django 单元测试模拟查询集

hibernate - 是否可以在我的 grails 应用程序上自定义 hibernate-plugin 自动生成的 CRUD 方法?

hibernate - 一对多关联的 Grails Hql 查询