zoukankan      html  css  js  c++  java
  • Moq测试基础说谈(三)——属性,常用方法

    (一)属性

    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();

     

  • 相关阅读:
    14.4.9 Configuring Spin Lock Polling 配置Spin lock 轮询:
    14.4.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB Master Thread I/O Rate
    14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量
    14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量
    14.4.6 Configuring Thread Concurrency for InnoDB 配置Thread 并发
    14.4.6 Configuring Thread Concurrency for InnoDB 配置Thread 并发
    14.4.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering
    14.4.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering
    14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器
    14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器
  • 原文地址:https://www.cnblogs.com/jams742003/p/1676585.html
Copyright © 2011-2022 走看看