2016-07-06 92 views
0

我故意導致cat實例失敗。以下測試通過。使domain.save(failOnError:true)在進行集成測試時失敗

void testSomething() {        

     Cat.metaClass.save = { 

      throw new Exception("Asdasd") 
     } 

     shouldFail(Exception){ 

      Cat cat = new Cat(name: "asd") 
      cat.save() 

     } 


     GroovySystem.metaClassRegistry.removeMetaClass(Cat.class) 


    } 

但是,當我爲保存方法設置failOnError屬性,則失敗。如何使用metaClass更改保存以使save(failOnError:true)引發異常?我感謝任何幫助!謝謝!

void testSomething() {        

     Cat.metaClass.save = { 

      throw new Exception("Asdasd") 
     } 

     shouldFail(Exception){ 

      Cat cat = new Cat(name: "asd") 
      cat.save(failOnError: true) 

     } 


     GroovySystem.metaClassRegistry.removeMetaClass(Cat.class) 


    } 

一種替代方法做同樣的試驗是無效的參數傳遞到域實例,以便驗證失敗,並拋出異常,但因爲在某些情況下,域實例沒有按」這不會在所有情況下工作t需要用戶給出的任何參數。因此,爲了模擬域save()的失敗,我們需要一種方法來模擬保存失敗。所以,我很感激,如果有人已經回答瞭如何保存或不保存參數如save(flush:true),save(failOnError:true)。謝謝!

回答

1

你的第一個metaClassing的save()很好。

嘗試metaClass save(failOnError:true)版本時,必須更改metaClassing語句以匹配實際採用的方法的簽名。 「save()」調用與「save(failOnError:true)」調用不同。試試這個(我懷疑參數是嚴格鍵入的,所以我使用的是Map。:

Cat.metaClass.save = { Map map -> 
    throw new Exception("failOnError is true") 
} 
相關問題