?????? 有時程序使用HttpWebRequest與HttpWebResponse實現HTTP的訪問,但我們想測試它們不太容易實現。現在我們可以使用Moles框架來實現對它的單元測試。如果您還不了解Moles,可以先到官方網站看這個文檔。下面我們來看片段代碼:
[
TestMethod ]
[
HostType (
"Moles" )]
[
Description (
"Testing with moles assemblies" )]
public void Get_KnownUrl_ReturnsExpectedValue()
{
var mockedWebResponse =
new MHttpWebResponse ();
MHttpWebRequest .
AllInstances .GetResponse = (x) =>{
return mockedWebResponse;};
var googleUri =
new Uri (
"http://www.google.com" );mockedWebResponse.StatusCodeGet = () => {
return HttpStatusCode .OK; };mockedWebResponse.ResponseUriGet = () => {
return googleUri; };mockedWebResponse.ContentTypeGet = () => {
return "testHttpResponse" ; };
string mockedResponseStr =
@"<html> \r\n" +
" <head></head> \r\n" +
" <body> \r\n" +
" <h1>Hello World</h1> \r\n" +
" </body> \r\n" +
"</html>" ;mockedWebResponse.ContentLengthGet = () => {
return mockedResponseStr.Length; };
using (
var memoryStream =
new MemoryStream ()){
using (
var sw =
new StreamWriter (memoryStream)){sw.Write(mockedResponseStr);sw.Flush();memoryStream.Seek(0,
SeekOrigin .Begin);mockedWebResponse.GetResponseStream = () => memoryStream;
//act var request =
WebRequest .Create(
"http://www.google.com" );
var response = (
HttpWebResponse )request.GetResponse();
// Assert string htmlContent =
null ;
using (
var streamReader =
new StreamReader (response.GetResponseStream())){htmlContent = streamReader.ReadToEnd();}
Assert .AreEqual(
HttpStatusCode .OK, response.StatusCode);
Assert .AreEqual(mockedResponseStr.Length, response.ContentLength);
Assert .AreEqual(mockedResponseStr, htmlContent);
Assert .AreEqual(googleUri, response.ResponseUri);}}
}
上面的基于MsTest的代碼引用Moles生成的System.Moles.dll,HttpWebRequest與HttpWebResponse是在System.dll里的所以生成它。一開始對一些屬性與方法的Mock操作,引用的是那些生成的MolesAssembiles,看字面意思可以了解代碼的意圖。接著模擬請求Google網站,返回我們遇先設置好返回的HtmlString,最后在驗證中驗證Stream,HttpStatusCode和Length是否一致。 當然您也可以測試其它屬性成方法。注意最后請求的類是真實的類,可以演示我們把它們寫在一起了。實際中可能是某個真實環境的API之類的方法。 希望對您開發有幫助。
?
您可以感興趣的文章:
使用Moles對靜態方法做UnitTest
作者:Petter Liu 出處:http://www.cnblogs.com/wintersun/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 該文章也同時發布在我的獨立博客中-Petter Liu Blog。
轉載于:https://www.cnblogs.com/wintersun/archive/2012/01/07/2315588.html
總結
以上是生活随笔 為你收集整理的使用Moles框架实现HttpWebRequest与HttpWebResponse的单元测试 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。