我想爲我的ASP.NET WebApi服務編寫測試,並針對自託管服務和實時Web託管服務運行該測試。我想這可以用測試夾具完成,但我不確定如何設置它。有誰知道使用可配置測試夾具的例子,以便您可以將參數傳遞給Xunit以選擇自己託管的夾具還是Web主機夾具?如何在自主主機和生產webapi服務上運行XUnit測試?
1
A
回答
0
我會建議使用內存服務器來測試你的控制器,所以你不需要在你的單元測試中啓動自主主機。
http://blogs.msdn.com/b/youssefm/archive/2013/01/28/writing-tests-for-an-asp-net-webapi-service.aspx
1
這裏是如何用最新的xUnit 2.0測試版的工作。
創建一個夾具:
public class SelfHostFixture : IDisposable {
public static string HostBaseAddress { get; private set; }
HttpSelfHostServer server;
HttpSelfHostConfiguration config;
static SelfHostFixture() {
HostBaseAddress = ConfigurationManager.AppSettings["HostBaseAddress"]; // HttpClient in your tests will need to use same base address
if (!HostBaseAddress.EndsWith("/"))
HostBaseAddress += "/";
}
public SelfHostFixture() {
if (/*your condition to check if running against live*/) {
config = new HttpSelfHostConfiguration(HostBaseAddress);
WebApiConfig.Register(config); // init your web api application
var server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
}
}
public void Dispose() {
if (server != null) {
server.CloseAsync().Wait();
server.Dispose();
server = null;
config.Dispose();
config = null;
}
}
}
然後定義將使用固定的集合。集合是在xUnit 2中進行組測試的新概念。
[CollectionDefinition("SelfHostCollection")]
public class SelfHostCollection : ICollectionFixture<SelfHostFixture> {}
它只是一個標記,所以沒有實現。 現在,依靠你的主機上標記測試是集合中:
[Collection("SelfHostCollection")]
public class MyController1Test {}
[Collection("SelfHostCollection")]
public class MyController4Test {}
亞軍將創建一個從MyController1Test
中運行任何測試時,你的夾具和MyController4Test
的單一實例確保您的服務器只啓動一次每集合。
相關問題
- 1. ftp_get在本地主機上運行,但不在生產服務器上運行
- 2. 如何在測試/生產服務器上運行「composer update」?
- 3. 在生產代碼/服務器上運行測試
- 4. 如何在Windows主機服務器上運行.php文件
- 5. 如何判斷WCF服務是否在主機上運行?
- 6. 如何在主機上運行本地服務器?
- 7. 如何在主機名上運行django服務器?
- 8. 從臨時服務器和本地主機的代碼測試訪問生產服務器上的MySQL數據
- 9. 反序列化不生產服務器上運行,適用於本地主機
- 10. 本地主機服務器上的iPhone和ipad測試網站
- 11. Google登錄在本地主機和測試服務器上運行,但不是天青網站(應用服務)
- 12. 主持和本地生產服務器
- 13. 如何自動運行jcl在主機上運行cobol程序
- 14. 如何在生產服務器上運行Yard服務器?
- 15. 如何在服務器上自主運行程序,如何在服務器上無限運行java程序?
- 16. 如何從heroku上的測試移至hostmonster等主機上的生產?
- 17. Phpmailer在本地主機上運行,但不在服務器上
- 18. 我該如何檢查遠程主機上運行的服務?
- 19. 應用服務器可能已經在主機本地主機上運行
- 20. Resharper未運行xUnit測試
- 21. 在本地主機上運行時測試可確認(設計)
- 22. 有沒有辦法在遠程主機上運行Selenium測試?
- 23. 主機連接使用「JMeter」運行測試時發生異常
- 24. 如何執行「nslookup主機服務器」
- 25. 在mac服務器上運行sql查詢的主機網站
- 26. Web RTC服務器僅在本地主機上運行
- 27. 使用Javascript訪問在本地主機上運行的服務
- 28. wcf服務主機僅在端口號8080上運行
- 29. 無法在本地主機上運行Apache Tomcat服務器?
- 30. 在主機服務器上運行控制檯應用程序
只是FYI ......當進行內存中測試時,我們需要確保請求和響應經過格式化程序的序列化/反序列化過程以捕獲任何問題...在我的非常老的帖子中有一些信息: http://blogs.msdn.com/b/kiranchalla/archive/2012/05/06/in-memory-client-amp-host-and-integration-testing-of-your-web-api-service.aspx。考慮到這一點,我認爲做自我主機測試是一個更好的選擇... –