模拟。SetupStatic (
typeof
(MyStaticType));
模拟。SetupStatic (
typeof
(MyStaticType) StaticConstructor.Mocked);
静态构造函数的行为只执行一次。
(TestMethod)
公共
无效
ShouldMockStaticClassWithStrictBehavior ()
{
Var期望= 10;
/ /安排
//获取静态实例(Foo),以便忽略构造函数进行模拟。
//如果不模拟构造函数,将抛出NotImplementedException。
模拟。SetupStatic (
typeof
(Foo), StaticConstructor.Mocked);
//排列:当Foo.Execute()方法用10调用时,它应该返回预期的结果。
Mock.Arrange(() => Foo.Execute(10)).Returns(预期);
/ /行为
var actual = Foo.Execute(10);
/ /维护
断言。AreEqual(预期,实际);
}
公共
类
喷火
{
静态
Foo ()
{
扔
新
NotImplementedException ();
}
公共
静态
int
FooProperty
{
得到
{
扔
新
NotImplementedException ();
}
集
{
扔
新
NotImplementedException ();
}
}
}
...
(TestMethod)
公共
无效
ShouldArrangeStaticProperty ()
{
Var期望= 0;
/ /安排
//获取静态实例(Foo),以便忽略构造函数进行模拟。
//如果不模拟构造函数,将抛出NotImplementedException。
模拟。SetupStatic (
typeof
(Foo), StaticConstructor.Mocked);
//排列:当static(Foo.FooProp_GET)属性被调用时,它应该返回预期的结果。
Mock.Arrange(() => Foo.FooProperty).Returns(预期);
/ /维护
断言。AreEqual(预期,Foo.FooProp);
}
公共
类
喷火
{
静态
Foo ()
{
扔
新
NotImplementedException ();
}
公共
静态
int
FooProperty
{
得到
{
扔
新
NotImplementedException ();
}
集
{
扔
新
NotImplementedException ();
}
}
}
...
(TestMethod)
公共
无效
ShouldFakeStaticPropertySet ()
{
保龄球
又叫=
假
;
/ /安排
//获取静态实例(Foo),以便忽略构造函数进行模拟。
//如果不模拟构造函数,将抛出NotImplementedException。
模拟。SetupStatic (
typeof
(Foo), StaticConstructor.Mocked);
//排列:当static(Foo.FooProp_SET)属性设置为10时,它应该将true赋值给isCalled。
Mock.ArrangeSet(() => {Foo。FooProperty = 10;}).DoInstead(() => {isCalled =
真正的
;});
/ /行为
Foo。喷火Prop = 10;
/ /维护
Assert.IsTrue(思想);
}
扩展方法是一种特殊的静态方法。它们就像扩展类型上的实例方法一样被调用。模拟扩展方法类似于模拟任何实例方法。唯一的区别是我们不需要Mock.Create T < > ()默认情况下,将类初始化为扩展模拟的调用是局部的。
公共
静态
类
FooExtensions
{
公共
静态
字符串
回声(
这
Foo Foo,
字符串
值)
{
返回
价值;
}
}
...
(TestMethod)
公共
无效
ShouldAssertExtensionMethodMockingWithArguments ()
{
字符串
预期=
“酒吧”
;
/ /安排
Var foo =
新
Foo ();
//排列:当扩展方法foo.Echo()使用任何字符串参数被调用时,
//返回预期值。
Mock.Arrange(() => foo.Echo(Arg.IsAny<
字符串
> ())) .Returns(预期);
/ /行为
字符串
Actual = foo。回声(
“你好”
);
/ /维护
断言。AreEqual(预期,实际);
}