2012-09-24 63 views
0

是否可以直接爲Grails單元測試類的特定方法設置System.property?Grails set系統屬性測試

我有一個過濾器類,阻止了一些行動,如果一個系統屬性中設置Config.groovy文件:

class MyFilters { 
def filters = 
{ 
    if ('true'.equals(System.properties.getProperty('myProperty', 'false'))){ 
     writeFilter(controller: "myController", action: "update") 
     { 
      before = 
      { 
       response.sendError(HttpServletResponse.SC_FORBIDDEN); 
       return false; 

在MyControllerTests,我試圖實現對過濾器測試:

void testMyFilter(){ 
    System.properties.setProperty('myProperty', 'true') 
    withFilters(action:"update") { 
     controller.update() 
    } 
    assert response.status == HttpServletResponse.SC_FORBIDDEN 
} 

但是這個過濾器類已經在這個階段被模擬(使用Config中默認的'false'屬性值),所以測試中屬性的改變沒有效果。

有沒有辦法解決這個問題,或者是一種強制Grails在prop更改後重新加載Filters類的方法?我無法在Config中更改默認屬性,因爲其他控制器測試會中斷,只是針對特定環境設置了此道具,因此我希望通過檢查過濾器的測試覆蓋場景。

謝謝。

+0

不可避免地,我發現如何做到這一點約一分鐘後,我發佈了這個。 在setProperty之後添加mockFilters(MyFilters)使Grails使用更新的屬性重建模擬過濾器。 (對於自我回答來說太新了,我會盡可能地關閉這個問題)。 – spacebot

+0

請發表評論作爲回答,因此這個問題可能被關閉。 –

回答

1

不可避免地,我發現如何做到這一點,我發佈後約一分鐘。在setProperty之後添加mockFilters(MyFilters)使Grails使用更新的屬性重建模擬過濾器。