生活随笔
收集整理的這篇文章主要介紹了
使用Moles框架实现HttpWebRequest与HttpWebResponse的单元测试
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?????? 有時(shí)程序使用HttpWebRequest與HttpWebResponse實(shí)現(xiàn)HTTP的訪問,但我們想測(cè)試它們不太容易實(shí)現(xiàn)。現(xiàn)在我們可以使用Moles框架來實(shí)現(xiàn)對(duì)它的單元測(cè)試。如果您還不了解Moles,可以先到官方網(wǎng)站看這個(gè)文檔。下面我們來看片段代碼:
[
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里的所以生成它。一開始對(duì)一些屬性與方法的Mock操作,引用的是那些生成的MolesAssembiles,看字面意思可以了解代碼的意圖。接著模擬請(qǐng)求Google網(wǎng)站,返回我們遇先設(shè)置好返回的HtmlString,最后在驗(yàn)證中驗(yàn)證Stream,HttpStatusCode和Length是否一致。 當(dāng)然您也可以測(cè)試其它屬性成方法。注意最后請(qǐng)求的類是真實(shí)的類,可以演示我們把它們寫在一起了。實(shí)際中可能是某個(gè)真實(shí)環(huán)境的API之類的方法。 希望對(duì)您開發(fā)有幫助。
?
您可以感興趣的文章:
使用Moles對(duì)靜態(tài)方法做UnitTest
作者:Petter Liu 出處:http://www.cnblogs.com/wintersun/ 本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。 該文章也同時(shí)發(fā)布在我的獨(dú)立博客中-Petter Liu Blog。
轉(zhuǎn)載于:https://www.cnblogs.com/wintersun/archive/2012/01/07/2315588.html
總結(jié)
以上是生活随笔 為你收集整理的使用Moles框架实现HttpWebRequest与HttpWebResponse的单元测试 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。