2012-03-06 62 views
11

我目前正在評估ServiceStack(在.Net中創建基於休息的服務)。其中一個感興趣的領域是測試方面。我的休息服務將注入許多應用程序服務(目前使用Autofac)。我需要的是一種機制來測試其餘層並在我的應用層(通過MOQ)定義期望值,所以我沒有進行集成測試,而是單元測試這個層?服務堆棧和模擬,任何教程?

有關如何做到這一點的任何想法?

回答

12

A ServiceStack Service就像任何普通的C#服務類一樣,可以像任何其他類一樣以相同的方式進行模擬。 ServiceStack服務的最小依賴性是實現無依賴關係的IService接口標記,以及任何服務只接受請求DTO並返回任何對象的地方。單元測試ServiceStack服務

的一種方法是使用DirectServiceClient爲seen in this example,這樣做的好處是,它可以讓你使用相同的單元測試作爲一個集成測試 - 測試所有不同的XML,JSON,JSV和SOAP端點。

否則,你可以單元測試和模擬它像任何其他類,e.g:

var service = new TestService { 
    MyDependency = new Mock<IMyDependency>().Object 
}; 
var response = service.Get(new Test { Id = 1 }); 
Assert.That(response.Result, Is.EqualTo("Hello, 1")); 
+0

@Thanks。我認爲我們會爲我們的新項目進行服務堆棧。做得好。 – 2012-03-07 08:56:28

+2

當我用這種方式模擬服務過濾器的屬性似乎並沒有被觸發,那是預期的行爲? – Shagglez 2013-01-17 17:56:02

+0

當你模擬'IService '時,你只需使用它來隔離依賴關係。所有的過濾器屬性都依賴於更多的堆棧運行(即AppHost類中指定的setup/configuration/initialization)。如果您需要在過濾器屬性中測試代碼,則應該獨立測試屬性類。 – CodeMonkeyKing 2013-02-12 04:40:31