日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RhinoMock入门(4)——次序和委托

發(fā)布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RhinoMock入门(4)——次序和委托 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

(一)次序(Ordered

rhinomock中,可以按次序調(diào)用方法。默認條件下,方法調(diào)用沒有順序。如果按次序錄制,那么在調(diào)用方法時必須按錄制時相同的次序進行。

?

請看:

public?interface?ICustomer
{
?? string?ShowTitle(string?str);
?? int?Unid?{?get;?set;?}
?? string?CustomerName?{?get;?set;?}
?? string?Address?{?get;?set;?}
}

?

測試:

public?void?TestNoOrder()
{
????MockRepository?mocks?
=?new?MockRepository();?
????ICustomer?customer?
=?mocks.StrictMock<ICustomer>();?

????
//默認條件下是沒順序的
????Expect.Call(customer.Unid).Return(1);
????Expect.Call(customer.CustomerName).Return(
"宋江");
????Expect.Call(customer.Address).Return(
"山東");?

????mocks.ReplayAll();?

????Assert.AreEqual(
"宋江",?customer.CustomerName);
????Assert.AreEqual(
1,?customer.Unid);
????Assert.AreEqual(
"山東",?customer.Address);
}

?

?

當(dāng)使用次序時:

public?void?TestOrder()
{
????MockRepository?mocks?
=?new?MockRepository();?
????ICustomer?customer?
=?mocks.StrictMock<ICustomer>();
????
using?(mocks.Ordered())
????{
????????Expect.Call(customer.Unid).Return(
1);
????????Expect.Call(customer.CustomerName).Return(
"宋江");
????????Expect.Call(customer.Address).Return(
"山東");
????}?

????mocks.ReplayAll();

????Assert.AreEqual(
"宋江",?customer.CustomerName);
????Assert.AreEqual(
1,?customer.Unid);
????Assert.AreEqual(
"山東",?customer.Address);
}

?

這時,如果調(diào)用時沒有按期望時的次序進行,那就會出錯,拋出異常。

這種次序可以靈活使用,例如可以次序一個mock,然后期望條件達到后,再不按次序進行。注意:在進行回播前要退出次序。

?

(二)模擬委托

先定義委托:

public?delegate?void?DoThing(string?strMsg);

??

然后模擬委托:

[Test]
public?void?TestDelegate1()
{
????MockRepository?mocks?
=?new?MockRepository();
????var?oo?
=?mocks.DynamicMock<DoThing>();
????oo(
"");
????mocks.ReplayAll();
????oo(
"");
????mocks.VerifyAll();
}

?

有兩個系統(tǒng)定義的委托Func<TResult>Action<T>

前是帶返回值的委托,后者不帶返回值,現(xiàn)在通過Action<T>來實現(xiàn)上例

[Test]
public?void?TestDelegate2()
{
????MockRepository?mocks?
=?new?MockRepository();
????var?oo?
=?mocks.DynamicMock<Action<string>>();

????oo(
"");
????mocks.ReplayAll();
????oo(
"");
????mocks.VerifyAll();
}

?

再來一個Func,即帶返回值的委托的例子:

[Test]
public?void?TestDelegateFunc()
{
????MockRepository?mocks?
=?new?MockRepository();
????var?oo?
=?mocks.DynamicMock<Func<string,?string>>();

????Expect.Call(oo(
"")).Return("abc");
????mocks.ReplayAll();
????Assert.AreEqual(
"abc",?oo(""));
}

?

?

再來一個例子:

public?class?Customer
{
?????Func
<string,?string>?_fun;
?????
public?Customer(Func<string,?string>?fun)
?????{
??????????_fun?
=?fun;
?????}

?????
public?void?DoSomething(string?strMsg)
?????{
??????????Console.WriteLine(_fun(strMsg));
?????}
}

?

?

測試:

[Test]
public?void?TestDelegateFunc()
{
????MockRepository?mocks?
=?new?MockRepository();
????var?oo?
=?mocks.DynamicMock<Func<string,?string>>();
????Expect.Call(oo(
"")).Return("abc");
????mocks.ReplayAll();?

????var?customer?
=?new?Customer(oo);
????customer.DoSomething(
"");
}

?

于對這兩種委托請見:http://www.cnblogs.com/jams742003/archive/2009/10/31/1593393.html

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/jams742003/archive/2010/05/10/1731767.html

總結(jié)

以上是生活随笔為你收集整理的RhinoMock入门(4)——次序和委托的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。