有时候一些测试情况不可能真实、方便的模拟出来,这个时候可以借助Mock对象。
Mock对象也就是真实对象在调试期的替代品。
使用mock对象进行测试的时候,总共分三个步骤,分别是
1、使用一个接口来描述这个对象
2、为产品代码实现这个接口
3、以测试为目的,在mock对象中实现这个接口。
因为测试代码只会通过接口来引用对象,所以它完全不知道他引用的究竟是真实的对象还是mock对象。
(单元测试之道用的是 DotNetMock ,用的是2.2版本的,但是我用的是 2.9的,看类库中好象有NUnit.Mock,等研究一下,毕竟是头一次接触这方面的内容,难度还是有滴)
下午看了下示例代码,照着例子做了个简单的demo
一般是继承Mock类,
以下是DotNetMock的help
MockObject Class
Base Mock Object. All custom Mock Objects can extend this object.
一般的程序结构是这样的
//MyMock
public class MyMock:Mock
{
//略代码
//申明继承了IExpectation接口的类,比如ExpectationValue
Expectation exp =new Expectation("name");
//公开两个方法/属性 可以设置
//exp.Actual - 实际的值
//exp.Expected -期望的值
}
//测试代码
//在测试代码中,赋值,调用MyMock.Verity() 方法进行验证。
[Test]
public void Test_Misspasswork()
{
MockLogger log =new MockLogger();
AccessController acc =new AccessController(log,"Access Control");
log.ExpectedName ="Access Control";
Assert.IsFalse(acc.CanAccess("userid",null));
Assert.IsFalse(acc.CanAccess("userid",""));
//inherit Mock’s Method
log.Verify();
Console.Write("Access Success");
}
public class MyMock:Mock
{
//略代码
//申明继承了IExpectation接口的类,比如ExpectationValue
Expectation exp =new Expectation("name");
//公开两个方法/属性 可以设置
//exp.Actual - 实际的值
//exp.Expected -期望的值
}
//测试代码
//在测试代码中,赋值,调用MyMock.Verity() 方法进行验证。
[Test]
public void Test_Misspasswork()
{
MockLogger log =new MockLogger();
AccessController acc =new AccessController(log,"Access Control");
log.ExpectedName ="Access Control";
Assert.IsFalse(acc.CanAccess("userid",null));
Assert.IsFalse(acc.CanAccess("userid",""));
//inherit Mock’s Method
log.Verify();
Console.Write("Access Success");
}
浙公网安备 33010602011771号