[英]How to mock abstract class with static members in Grails?
我需要模擬GrailsControllerClass接口。 實例應該定義一個靜態變量。 問題在於MockFor和StubFor沒有為您提供添加靜態成員的選項。 因此,我編寫了擴展GrailsControllerClass的抽象類
abstract class MyController implements GrailsControllerClass {
static myDefinition = [name:"item1", action:"action1"]
}
現在,MockFor和StubFor引發錯誤:groovy.lang.MissingMethodException:方法的任何簽名:groovy.util.ProxyGenerator.instantiateAggregateFromBaseClass()適用於參數類型:(java.lang.Class,null)值……似乎是一個已報告的錯誤: http : //jira.codehaus.org/browse/GROOVY-3720 las,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())
}
您嘗試過GMock嗎? 它支持靜態方法的模擬。
您可以調整我相信的metaClass:
GrailsControllerClass.metaClass.'static'.myDefinition = [name:"item1", action:"action1"]
或使用地圖來模擬您的控制器界面:
def myController = [getMyDefinition:{[name:"item1", action:"action1"]}] as GrailsControllerClass
根據您的帖子,我不確定您是否正在尋找它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.