胖在一方

出得厅堂入得厨房的胖子

导航

NUnit学习笔记二 Mock

Posted on 2006-12-21 11:59  胖在一方  阅读(2764)  评论(2)    收藏  举报

有时候一些测试情况不可能真实、方便的模拟出来,这个时候可以借助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");
        }