C# Moq

2021-03-21 14:25

阅读:483

标签:span   clu   config   ready   provider   isnull   initial   str   add   

Moq


1 My Cases

        1.1 简单入门

2 Reference

        2.1 Methods

        2.2 Matching Arguments

        2.3 Properties

        2.4 Events

        2.5 Callbacks

        2.6 Verification

        2.7 Customizing Mock Behavior

        2.8 Miscellaneous

        2.9 Advanced Features

        2.10 LINQ to Mocks

3 FAQ

        3.1 static class/method


1 My Cases

1.1 简单入门

// 假定我有一个 MyFactory 用来创建 MyInterface 实例
// 创建 MyFactory 的 Mock 对象
var mockFactory = new Mock>();

// 创建 MyInterface 的 Mock 实例
var mockInstance = new Mock>();

// 使用 Moq 实现如果调用 MyInstance.DoSomething(bool) 方法无论传入参数为何值一概抛出 MyException 异常
mockInstance.Setup(c => c.DoSomething(It.IsAnybool>()))
    .Throws(new MyException("my exception message"));

// 使用 Moq 实现 MyFactory 的 Mock 实例第一次调用 CreateInstance(string) 方法时返回 MyInterface 的 Mock 实例
// 第二次及以后调用则返回真正的 MyInstance 实例
mockFactory.SetupSequence(f => f.CreateInstance(It.IsAnystring>()))
    .Returns(mockInstance.Object)
    .Returns(new MyInstance("real object"));

client.Factory = mockFactory.Object;

2 Reference

Please refer to Moq Quickstart

Moq is intended to be simple to use, strongly typed (no magic strings!, and therefore full compiler-verified and refactoring-friendly) and minimalistic (while still fully functional!).

2.1 Methods

Methods Mock

using Moq;

// Assumptions:

public interface IFoo
{
    Bar Bar { get; set; }
    string Name { get; set; }
    int Value { get; set; }
    bool DoSomething(string value);
    bool DoSomething(int number, string value);
    string DoSomethingStringy(string value);
    bool TryParse(string value, out string outputValue);
    bool Submit(ref Bar bar);
    int GetCount();
    bool Add(int value);
}

public class Bar 
{
    public virtual Baz Baz { get; set; }
    public virtual bool Submit() { return false; }
}

public class Baz
{
    public virtual string Name { get; set; }
}


var mock = new Mock>();
mock.Setup(foo => foo.DoSomething("ping")).Returns(true);


// out arguments
var outString = "ack";
// TryParse will return true, and the out argument will return "ack", lazy evaluated
mock.Setup(foo => foo.TryParse("ping", out outString)).Returns(true);


// ref arguments
var instance = new Bar();
// Only matches if the ref argument to the invocation is the same instance
mock.Setup(foo => foo.Submit(ref instance)).Returns(true);


// access invocation arguments when returning a value
mock.Setup(x => x.DoSomethingStringy(It.IsAnystring>()))
		.Returns((string s) => s.ToLower());
// Multiple parameters overloads available


// throwing when invoked with specific parameters
mock.Setup(foo => foo.DoSomething("reset")).Throws>();
mock.Setup(foo => foo.DoSomething("")).Throws(new ArgumentException("command"));


// lazy evaluating return value
var count = 1;
mock.Setup(foo => foo.GetCount()).Returns(() => count);


// returning different values on each invocation
var mock = 


评论


亲,登录后才可以留言!