Moq测试基础说谈(三)——属性,常用方法

简介: (一)属性 (1)测试 准备: public class Customer { public virtual int Unid { get; set; } public virtual string Name { get; set; } } 测试 var customer = new Mock(); customer.Setup(p => p.Name).Returns("Tom");   customer.SetupProperty(p => p.Name, "tt"); 以下就可以用这个属性了,和正常下属性访问相同。

(一)属性

1测试

准备:

public class Customer

{

public virtual int Unid { get; set; }

public virtual string Name { get; set; }

}

测试

var customer = new Mock<Customer>();

customer.Setup(p => p.Name).Returns("Tom");

 

customer.SetupProperty(p => p.Name, "tt");

以下就可以用这个属性了,和正常下属性访问相同。

二)Callbacks

当执行某方法时,调用其内部输入的(Action)委托

看它的5种重载:

Callback(Action)

Callback<T>(Action<T>)

Callback<T1, T2>(Action<T1, T2>)

Callback<T1, T2, T3>(Action<T1, T2, T3>)

Callback<T1, T2, T3, T4>(Action<T1, T2, T3, T4>)

这个方法调用其内部输入的Action委托,Aciton<T>5种重载,所以这里的Callbacks5种重载。

以第二个为例:

它的定义为:

ICallbackResult Callback<T>(Action<T> action)

这个表示一个输入参数,

var customer = new Mock<ICustomer>();

customer.Setup(p => p.GetCall(It.IsAny<string>()))

    .Returns("方法调用")

    .Callback((string s)=>Console.WriteLine("ok"+s));

customer.Object.GetCall("x");

 

这个Callback要调用的是GetCall(string s)中的s参数。

三)Verify

用于测试mock对象的方法或属性是否被调用执行。当不需要测试结果时用到

重载很多:

Verify()

Verify(Expression<Action<T>>)

Verify<TResult>(Expression<Func<T, TResult>>)

Verify(Expression<Action<T>>, Times)

Verify(Expression<Action<T>>, String)

Verify<TResult>(Expression<Func<T, TResult>>, Times)

Verify<TResult>(Expression<Func<T, TResult>>, String)

Verify(Expression<Action<T>>, Times, String)

Verify<TResult>(Expression<Func<T, TResult>>, Times, String)

 

用其中三个举例

第一个:Verify(),定义为:

public void Verify()

测试

public void TestVerify()

{

    var customer = new Mock<ICustomer>();

    customer.Setup(p => p.GetCall(It.IsAny<string>()))

.Returns("方法调用")

.Callback((string s) => Console.WriteLine("ok" + s))

.Verifiable();

 

    customer.Object.GetCall("调用了!");

    customer.Verify();

}

Mock对象中的GetCall方法设置为可证实的(Verifiable()),

如果不调用粗体部分语句,那么customer.Verify()执行就不能通过。这个方法很有用。

 

第二个:Verify(Expression<Action<T>>),定义为:

public void Verify(Expression<Action<T>> expression)

 

customer.Verify(p => p.GetCall("call"));

如果没有调用且输入call字串的参数,则失败。

第三个:Verify(Expression<Action<T>>, Times, String)

定义:

public void Verify(  Expression<Action<T>> expression,

    Times times,

    string failMessage

)

 

这个比上一个多了两个参数,一个用于表示调用次数相关描述,一个用于失败的时打印信息

customer.Setup(p => p.GetCall(It.IsAny<string>()))

                .Returns("方法调用")

                .Callback((string s) => Console.WriteLine("ok" + s))

                .Verifiable();

customer.Object.GetCall("call");

customer.Object.GetCall("call");

customer.Verify(p => p.GetCall("call"),

Times.AtLeast(2),"至少应被调用2");

 

GetCall方法被调用最少2次(且参数为call)时,测试成功。

方法中Times是个Times类类型,它有多个方法:

AtLeast

AtLeastOnce

AtMost

AtMostOnce

Between

Exactly

Never

Once

可以从语义上理解它们各自是什么意思,例如:AtLeast的定义为:

public static Times AtLeast(

    int callCount

)

四)VerifyAll

在使用Verify方法时,只有被标记为可证实的(.Verifiable())的才可以验证。

VerifyAll会验证所有的调用:

 

customer.Setup(p => p.GetCall(It.IsAny<string>()))

         .Returns("方法调用")

         .Callback((string s) => Console.WriteLine("ok" + s));

 

customer.Object.GetCall("call");

customer.VerifyAll();

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
JavaScript 测试技术 C#
【C#】【xUnit】【Moq】.NET单元测试Mock框架Moq初探!
在TDD开发模型中,经常是在编码的同时进行单元测试的编写,由于现代软件开发不可能是一个人完成的工作,所以在定义好接口的时候我们就可以进行自己功能的开发(接口不能经常变更),而我们调用他人的功能时只需要使用接口即可。
5336 0
|
17天前
|
开发框架 安全 .NET
.NET使用Moq开源模拟库简化单元测试
.NET使用Moq开源模拟库简化单元测试~
|
6月前
|
运维 Java 测试技术
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
49 3
|
Java Maven 数据库
Maven的聚合 继承 属性 版本管理 多环境资源配置 跳过测试
Maven的聚合 继承 属性 版本管理 多环境资源配置 跳过测试
Maven的聚合 继承 属性 版本管理 多环境资源配置 跳过测试
定义一个时钟类(TimeDemo),属性有:时、分、秒(默认值10时30分),方法有展示当前时间、过1秒,过1分钟,过1小时后的时分秒;在测试类中实现过10秒,过10分,过10小时后的时间展示
定义一个时钟类(TimeDemo),属性有:时、分、秒(默认值10时30分),方法有展示当前时间、过1秒,过1分钟,过1小时后的时分秒;在测试类中实现过10秒,过10分,过10小时后的时间展示
399 0
|
Shell Linux
linux shell之通过标识测试文件系统属性
linux shell之通过标识测试文件系统属性
141 0
创建一个手机类 定义属性名称、型号、颜色、价格, 并定义打电话和听音乐的功能。在测试类中创建对象进行测试。
创建一个手机类 定义属性名称、型号、颜色、价格, 并定义打电话和听音乐的功能。在测试类中创建对象进行测试。
|
测试技术
Moq测试基础说谈(二)——Mock方法,方法参数
准备工作: public interface ICustomer { } (一)方法 (1)普通的方法 在接口中添加3个方法:void AddCall(); string GetCall(); string GetCall(string strUser);   Mock测试: var customer = new Mock();   customer.
904 0
|
测试技术
Moq测试基础说谈(一)——简介,下载
Moq,就是Mock you。读音可以读成Mock~you。是Mock框架的一种。用于测试中的Mock测试。Mock是模拟的意思。Mock是模拟对象的一种技术。 它可以用于以下情况(引用): ----- 真实对象具有不可确定的行为(产生不可预测的结果,如股票的行情) ----- 真实对象很难被...
898 0
|
测试技术
Moq测试基础说谈(三)——属性,常用方法
(一)属性 (1)测试 准备: public class Customer { public virtual int Unid { get; set; } public virtual string Name { get; set; } } 测试 var customer = new Mock(); customer.Setup(p => p.Name).Returns("Tom");   customer.SetupProperty(p => p.Name, "tt"); 以下就可以用这个属性了,和正常下属性访问相同。
800 0