C# Moq
2021-03-21 14:25
标签: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
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 =