Mock<T> Class
定義為:
public class Mock<T> : Mock
where T : class
這的構造方法:
Mock<T>()
Mock<T>(MockBehavior)
Mock<T>(array<Object>[])
Mock<T>(MockBehavior, array<Object>[])
Mock的泛型實作類,它有很多方法和屬性。這裡一一列舉。
(一)方法
(1)As<TInterface>方法
為mock添加接口實作(mock),可以給它指定設定。
在mock對象的屬性(或方法)首次使用之前才有效。且,參數隻能是接口。
定義:
public virtual Mock<TInterface> As<TInterface>()
where TInterface : class
示例:
兩個接口:
其中的Icustomer接口還是前幾篇中用到的,這裡添加一個Iorder接口:
public interface IOrder
{
string ShowTitle(string str);
}
Mock測試:
var customer = new Mock<ICustomer>();
customer.Setup(p => p.GetCall()).Returns("方法調用");
customer.Object.GetCall();
var order=customer.As<IOrder>();
order.Setup(p => p.ShowTitle(It.IsAny<string>())).Returns("ok");
Assert.AreEqual("ok",order.Object.ShowTitle(""));
這個将出現異常,因為在As之前,已經對GetCall進行了調用。
(2)SetUp方法
為模拟的對象中的方法指定設定,它有兩個重載:
Setup(Expression<Action<T>>)
Setup<TResult>(Expression<Func<T,TResult>>)
從兩個委托可以知道,這兩個一個是為沒有傳回值的方法設定,一個是對有傳回值的方法設定
public void TestSetUp()
customer.Setup(p => p.AddCall())
.Callback(()=>Console.WriteLine("沒有傳回值"));
customer.Setup(p => p.GetCall(It.IsAny<string>()))
.Returns("ok")
.Callback((string q) => Console.WriteLine("有傳回值"));
customer.Object.AddCall();
customer.Object.GetCall("");
這個前幾篇已經廣泛使用。
(3) 其它方法略
其它内容可見:
<a href="http://www.cnblogs.com/jams742003/archive/2010/03/02/1676585.html" target="_blank">http://www.cnblogs.com/jams742003/archive/2010/03/02/1676585.html</a>
現在看一下Mock的一個構造器:
Mock<T>(MockBehavior),定義:
public Mock(MockBehavior behavior)
MockBehavior類是自定義mock行為的枚舉:
Strict mock對象沒有合适的設定時,總是抛出異常
Loose 從不抛出異常,如果必要會傳回預設值(引用類型為null,值類型為0,或枚舉和數組為空)
Default mock行為預設值,就是Loose值
接口:
string ShowAddress();
測試:
public void TestBehivor()
var order = new Mock<IOrder>();
order.Object.ShowTitle(string.Empty);
這個接口有兩個方法,在測試裡,建立了mock對象,然後調用它的一個方法:ShowTitle
但在之前,這個方法并沒有被設定,這時mock對象的預設行為為Default,也就是Loose,是以不會出現異常。
當把mock對象的行為設定為嚴格後:
var order = new Mock<IOrder>(MockBehavior.Strict);
order.Object.ShowTitle(string.Empty);
測試就會出錯:IOrder.ShowTitle("") invocation failed with mock behavior Strict.
Mock的名字空間中還有一個MockFactory類,是一個用于構造多個mock對象的功能工廠
它有三個方法:
Create,Verify,VerifyAll
Create的方法有:
Create<T>()
Create<T>(MockBehavior)
Create<T>(array<Object>[])
Create<T>(MockBehavior,array<Object>[])
其中Create<T>(array<Object>[])定義:
public Mock<T> Create<T>(
params Object[] args
) where T : class
它會根據參數來确定合适的被Mock的對象的構造器。
部落格園大道至簡
<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>
轉載請注明:部落格園