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中更改默認屬性,因爲其他控制器測試會中斷,只是針對特定環境設置了此道具,因此我希望通過檢查過濾器的測試覆蓋場景。
謝謝。
不可避免地,我發現如何做到這一點約一分鐘後,我發佈了這個。 在setProperty之後添加mockFilters(MyFilters)使Grails使用更新的屬性重建模擬過濾器。 (對於自我回答來說太新了,我會盡可能地關閉這個問題)。 – spacebot
請發表評論作爲回答,因此這個問題可能被關閉。 –