2011-03-11 63 views
0

我有一個控制器應該在我的應用程序中的域類上操作,但不關心它使用的是哪種類型的域類。我想編寫單元測試來驗證它是否正確響應,但我不想將它耦合到我的應用程序中的域類,以防域類更改或被刪除。這樣的事情:從控制器單元測試中刪除域類依賴關係

void testReadNoItems() { 
    mockDomain(Item) 

    controller.params["class"] = "DefaultGrailsDomainClass" 
    controller.params.xaction = "read" 
    controller.index() 

    def json = JSON.parse(controller.response.contentAsString) 

    assert json.metaData.root == "data" 
    assert json.metaData.totalProperty == "total" 
    assert json.metaData.successProperty == "success" 
    assert json.metaData.idProperty == "id" 
    assert json.metaData.fields[0].id == "int" 
    assert json.metaData.fields[1].name == "string" 
    assert json.data == [] 
    assert json.total == 0 
} 

有沒有什麼辦法可以刪除項目域類的依賴關係?

回答

1

如果您從控制器中刪除所有Item的引用,您可以創建一個ItemService(這是事務性的)並將其注入到控制器中。從那裏,你可以保持ItemService相對固定並將其模擬在控制器中。

測試:

protected void setUp(){ 
    controller.itemService = [retrieveItems: { arg -> return [new Item()] }] as ItemService 
} 
+0

我同意 - 控制器應該調用服務,然後調用域對象。 – sourcedelica 2011-03-13 19:56:59