不論是在Web項目中添加Web服務(wù)還是直接新建一個(gè)Web服務(wù)項目,在為WebMethod創(chuàng )建單元測試,運行測試的時(shí)候有可能拋出這樣的錯誤信息:
Web 請求“http://localhost:<port>/”在未運行測試的情況下成功完成。這種情況會(huì )在為測試配置 Web應用程序失敗(處理請求時(shí)發(fā)生 ASP.NET 服務(wù)器錯誤)時(shí)或未執行任何 ASP.NET 頁(yè)(URL 可能指向一個(gè) HTML 頁(yè)、一個(gè) Web服務(wù)或一個(gè)目錄列表)時(shí)發(fā)生。在 ASP.NET 中運行測試要求 URL 解析為 ASP.NET 頁(yè),并且該頁(yè)在 Load事件發(fā)生之前一直正確執行。請求的響應連同測試結果一起存儲在文件“WebRequestResponse_<web methodname>.html”中,通??墒褂?Web 瀏覽器打開(kāi)此文件來(lái)查看其內容。
看看錯誤信息的說(shuō)明。當中已經(jīng)說(shuō)出,發(fā)生這種情況有兩個(gè)可能:1.配置Web應用程序失敗,2.未執行任何ASP.NET頁(yè)。因此,排除錯誤也從這兩方面下手。
首先要確定Web應用程序是可以正確執行的。如何判斷呢?只要該程序能被正常編譯,或是能在瀏覽器中正常瀏覽該WebService即可。能被正常瀏覽的WebService的內容大致如下:
如果Web應用程序是可以正確執行的,那么出現上述錯誤的原因則是第二種情況:未執行任何的ASP.NET頁(yè)。在為一個(gè)WebMethod通過(guò)Visual Studio創(chuàng )建單元測試時(shí),自動(dòng)生成的代碼大致如下:
/// <summary>///HelloWorld 的測試///</summary>[TestMethod()][HostType("ASP.NET")][AspNetDevelopmentServerHost("E:\\Visual Studio 2005\\Test\\TestWebService", "/")][UrlToTest("http://localhost:6036/")]public void HelloWorldTest(){TestService target = new TestService();string actual;actual = target.HelloWorld();Assert.Inconclusive(actual);}
按屬性名來(lái)理解,HostType設定的是主機類(lèi)型,AspNetDevelopmentServerHost指定的是項目的路徑,而UrlToTest指定的是發(fā)送請求到WebService的Url,導致上述錯誤出現的問(wèn)題也在此。因為HostType屬性指定了主機的類(lèi)型是ASP.NET,則UrlToTest屬性必須可以被解析為ASP.NET頁(yè)。在運行測試的時(shí)候,正是該頁(yè)面向WebService發(fā)送請求。
在VisualStudio自動(dòng)創(chuàng )建的代碼中,UrlToTest的值通常是Web項目的Url,該Url默認是會(huì )指向項目中的Default.aspx頁(yè)面,具體情況視ASP.NET服務(wù)器的配置而定。所以,如果你所建的項目中沒(méi)有Default.aspx的話(huà),直接運行測試的時(shí)候則會(huì )出現上述錯誤。所以我們必須把UrlToTest的值改成一個(gè)可被解析為ASP.NET的頁(yè)。
以下屬于猜測:如果HostType的值不指定為ASP.NET的話(huà),UrlToTest也應該可以使非ASP.NET頁(yè)。本人對HostType屬性了解不多,這里只作簡(jiǎn)單說(shuō)明,留待有興趣的朋友自己驗證。
引文來(lái)源 “Web請求在未運行測試的情況下成功完成。”的處理方法。 - Jeff Chow - 博客園
我(GB2013)在嘗試單元測試時(shí),按如上方?jīng)]有解決問(wèn)題,但是注掉HostType和UrlToTest兩個(gè)配置節以后,就可以正常測試了。具體原因還不清楚。
聯(lián)系客服