VS2008单元测试之NMock2

在做单元测试时,有时候需要其它的类的支持,但是其它的类很可能没有写好,或者根本就不存在,为了继续进行测试,我们不得不构造一个虚拟的类来帮助,NMock就是这样一个工具。
NMock2是NMock的针对FrameWork2.0的版本,免费的,网上教程非常少见,这里给大家提供一个简单示例。
首先去官网下载最新版本。下载后解压缩就可以了,他提供的是DLL文件,不用安装。
然后,再要使用的工程中引用这个DLL,即NMock2.dll。
还是继续用我前两篇文章用的工程,首先在被测工程NunitTest中,添加一个类Student.cs,代码如下:

代码
   
     
1 public class Student
2 {
3 public Student( int stuID, string stuName)
4 {
5 this .stuID = stuID;
6 this .stuName = stuName;
7 }
8
9 private int stuID;
10
11 public int StuID
12 {
13 get { return stuID; }
14 set { stuID = value; }
15 }
16
17 private string stuName;
18
19 public string StuName
20 {
21 get { return stuName; }
22 set { stuName = value; }
23 }
24
25 public override bool Equals( object obj)
26 {
27 Student s = obj as Student;
28 if (s == null )
29 return false ;
30 bool isSame = s.StuID.Equals( this .stuID) && s.StuName.Equals( this .stuName);
31
32 return isSame;
33 }
34
35 }


在添加一个接口IStudentDAL.cs,代码如下:

  
    
1 public interface IStudentDAL
2 {
3 Student GetStuddent( int stuID);
4 }

在添加一个StudentService.cs类,具体代码如下:

代码
   
     
1 public class StudentService
2 {
3 private IStudentDAL studentDAL;
4 public StudentService(IStudentDAL studentDAL)
5 {
6 this .studentDAL = studentDAL;
7 }
8
9 public Student GetStuddent( int stuID)
10 {
11 return studentDAL.GetStuddent(stuID);
12 }
13
14 }

这些建好后,我们希望测试一下,但还没有IStudentDAL的实现类,那么可以虚拟一个出来,具体操作如下:
在测试工程NunitDemo中添加NMock2.dll的引用,然后添加一个类NMockDemo.cs,具体代码如下:

代码
   
     
1 [TestFixture]
2 public class NMockDemo
3 {
4 private Mockery mock;
5
6 [SetUp]
7 public void BeforeTest()
8 {
9 mock = new Mockery();
10 }
11
12 [Test]
13 public void TestGetStudent()
14 {
15
16 Student s1 = new Student( 1 , " abc " );
17
18 // 虚拟IStudentDAL对象
19 var studentDAL = mock.NewMock < IStudentDAL > ();
20 StudentService s = new StudentService(studentDAL);
21
22 // 调用studentDAL.GetStuddent(1)时 return new Student(1,"abc")
23 Expect.Once.On(studentDAL).Method( " GetStuddent " ).With( 1 ).Will(Return.Value( new Student( 1 , " abc " )));
24
25 Student stu = s.GetStuddent( 1 );
26 Assert.AreEqual( " abc " , stu.StuName);
27 Assert.AreEqual(s1, stu);
28 // Assert.AreNotEqual(s1, stu);
29
30
31 }
32
33 }

这些都写好后,就可以用NUnit进行测试了。

你可能感兴趣的:(vs2008)