簡體   English   中英

如何在Grails中使用靜態成員模擬抽象類?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM