小菜鸟一步步打造图书馆外挂之五:数据访问之单元测试(二)
        
        使用NUnit对DAL工程中的类进行测试,并介绍一个NUnit的插件testdriven.net...
    
     上前已经写好了数据访问的方法,现在用NUnit对它进行测试。一般我们用NUnit自带的图形界面来测试它和Visual Studio 结合得不是很好,每次运行测试时还要打开一个别一个窗口,如下图:
现在介绍一个NUnit的插件testdriven.net,他是一个把Visual Studio和NUnit结合得很好的工具,可以从http://www.testdriven.net/上下载。下载后安装后想要运行某一个测试代码只要把光标放到该方法里单击右键就可以运行了,而且运行结果也在Visual Studio中输出,它还能以断点的方式来调试我们写的测试代码,还能统计出我们测试代码的覆盖率,很方便,如下图:
运行以上Coverage就会出现统计测试代码覆盖率的界面,如下图运行整个工程的测试:
 
 
红色的是原代码,黑色的是我们写的测试代码,后面有代码的覆盖率,如下图,蓝色的为测试时已运行的代码,红色的为未运行的代码:
 
上面讲了一些工具之类的,现在来看看DAL中的测试代码,我们对每个类写了一个测试类,如BookXML写了BookXMLTest类,UserXML写了UserXMLTest类,ADSLXML有ADSLXMLTest类,SettingXML有SettingXMLTest类,在写测试方法时要注意每个测试方法是独立的,不能相互依赖,不能共享作为参数的对象,运行完测试后要还原数据的原始性,不能因为测试而影响原来的数据。
BookXMLTest类:

 Code
Code1
 using System;
using System;2
 using System.Collections.Generic;
using System.Collections.Generic;3
 using System.Text;
using System.Text;4

5
 using NUnit.Framework;
using NUnit.Framework;6
 using LibraryHelper.Model;
using LibraryHelper.Model;7

8
 namespace LibraryHelper.DAL.Test
namespace LibraryHelper.DAL.Test9


 {
{10
 [TestFixture]
    [TestFixture]11
 public class BookXMLTest
    public class BookXMLTest12

 
     {
{13
 BookXML bookXML;
        BookXML bookXML;14
 //该类中的所有Case都引用同一个BookXML对象
        //该类中的所有Case都引用同一个BookXML对象15
 //所以该对象放到TestFixtureSetUp属性方法中初始化
        //所以该对象放到TestFixtureSetUp属性方法中初始化16

17
 [TestFixtureSetUp]
        [TestFixtureSetUp]18
 public void InitBookXML()
        public void InitBookXML()19

 
         {
{20
 bookXML = new BookXML();
            bookXML = new BookXML();21
 }
        }22

23
 [Test]
        [Test]24
 public void TestInsertBook()
        public void TestInsertBook()25

 
         {
{26

27
 Book insertBook = new Book();
            Book insertBook = new Book();28
 insertBook.Title = "重构";
            insertBook.Title = "重构";29
 insertBook.BorrowDate = Convert.ToDateTime("2009-3-1");
            insertBook.BorrowDate = Convert.ToDateTime("2009-3-1");30
 insertBook.ReturnDate = Convert.ToDateTime("2009-2-1");
            insertBook.ReturnDate = Convert.ToDateTime("2009-2-1");31
 insertBook.BorrowNum = "2";
            insertBook.BorrowNum = "2";32
 insertBook.ISBN = "45454545";
            insertBook.ISBN = "45454545";33

34
 //该方法添加成功后返回bool值,Assert一下是不是正确
            //该方法添加成功后返回bool值,Assert一下是不是正确35
 Boolean insertResult = bookXML.InsertBook(insertBook);
            Boolean insertResult = bookXML.InsertBook(insertBook);36

37
 Assert.IsTrue(insertResult);
            Assert.IsTrue(insertResult);38

39
 //XML文件中没有索引,所以用这种取得记录数量再减1的方法可以获得刚添加进入记录的行号
            //XML文件中没有索引,所以用这种取得记录数量再减1的方法可以获得刚添加进入记录的行号40
 Int32 insertBookIndex = bookXML.GetBookNum() - 1;
            Int32 insertBookIndex = bookXML.GetBookNum() - 1;41

42
 //添加进去再取出来对比一下两个对象
            //添加进去再取出来对比一下两个对象43
 Book getInsertBook = bookXML.GetSingleBookByRowIndex(insertBookIndex);
            Book getInsertBook = bookXML.GetSingleBookByRowIndex(insertBookIndex);44

45
 CompareBook(insertBook, getInsertBook);
            CompareBook(insertBook, getInsertBook);46

47
 //对象完之后删除该记录,恢复数据的原样
            //对象完之后删除该记录,恢复数据的原样48
 bookXML.DeleteBookByRowIndex(insertBookIndex);
            bookXML.DeleteBookByRowIndex(insertBookIndex);49

50
 }
        }51

52
 [Test]
        [Test]53
 public void TestGetBookList1()
        public void TestGetBookList1()54

 
         {
{55
 //不添加数据看能不能取出集合
            //不添加数据看能不能取出集合56
 List<Book> getBookList = bookXML.GetBookList();
            List<Book> getBookList = bookXML.GetBookList();57
 Assert.IsNotNull(getBookList);
            Assert.IsNotNull(getBookList);58
 }
        }59

60
 [Test]
        [Test]61
 public void TestGetBookList2()
        public void TestGetBookList2()62

 
         {
{63

64
 //添加两个Book对象再把它们取出来看看是不是刚刚加进去的对象
            //添加两个Book对象再把它们取出来看看是不是刚刚加进去的对象65

66
 Book insertBook1 = new Book();
            Book insertBook1 = new Book();67
 insertBook1.Title = "重构1";
            insertBook1.Title = "重构1";68
 insertBook1.BorrowDate = Convert.ToDateTime("2009-1-1");
            insertBook1.BorrowDate = Convert.ToDateTime("2009-1-1");69
 insertBook1.ReturnDate = Convert.ToDateTime("2009-1-2");
            insertBook1.ReturnDate = Convert.ToDateTime("2009-1-2");70
 insertBook1.BorrowNum = "1";
            insertBook1.BorrowNum = "1";71
 insertBook1.ISBN = "111111";
            insertBook1.ISBN = "111111";72
 bookXML.InsertBook(insertBook1);
            bookXML.InsertBook(insertBook1);73
 Int32 insertBookIndex1 = bookXML.GetBookNum() - 1;
            Int32 insertBookIndex1 = bookXML.GetBookNum() - 1;74

75
 Book insertBook2 = new Book();
            Book insertBook2 = new Book();76
 insertBook2.Title = "重构2";
            insertBook2.Title = "重构2";77
 insertBook2.BorrowDate = Convert.ToDateTime("2009-2-1");
            insertBook2.BorrowDate = Convert.ToDateTime("2009-2-1");78
 insertBook2.ReturnDate = Convert.ToDateTime("2009-2-2");
            insertBook2.ReturnDate = Convert.ToDateTime("2009-2-2");79
 insertBook2.BorrowNum = "2";
            insertBook2.BorrowNum = "2";80
 insertBook2.ISBN = "222222";
            insertBook2.ISBN = "222222";81
 bookXML.InsertBook(insertBook2);
            bookXML.InsertBook(insertBook2);82

83
 Int32 insertBookIndex2 = bookXML.GetBookNum() - 1;
            Int32 insertBookIndex2 = bookXML.GetBookNum() - 1;84

85
 List<Book> getBookList = bookXML.GetBookList();
            List<Book> getBookList = bookXML.GetBookList();86

87
 CompareBook(getBookList[insertBookIndex1], insertBook1);
            CompareBook(getBookList[insertBookIndex1], insertBook1);88
 CompareBook(getBookList[insertBookIndex2], insertBook2);
            CompareBook(getBookList[insertBookIndex2], insertBook2);89

90
 //比较完后删除刚加进去的对象
            //比较完后删除刚加进去的对象91
 bookXML.DeleteBookByRowIndex(insertBookIndex2);
            bookXML.DeleteBookByRowIndex(insertBookIndex2);92
 bookXML.DeleteBookByRowIndex(insertBookIndex1);
            bookXML.DeleteBookByRowIndex(insertBookIndex1);93
 }
        }94

95
 [Test]
        [Test]96
 public void TestGetBookNum1()
        public void TestGetBookNum1()97

 
         {
{98
 //取出来的对象不应该是Null的
            //取出来的对象不应该是Null的 99
 Assert.IsNotNull(bookXML.GetBookNum());
            Assert.IsNotNull(bookXML.GetBookNum());100
 }
        }101

102
 [Test]
        [Test]103
 public void TestGetBookNum2()
        public void TestGetBookNum2()104

 
         {
{105
 Int32 bookNum1 = bookXML.GetBookNum();
            Int32 bookNum1 = bookXML.GetBookNum();106

107
 Book insertBook = new Book();
            Book insertBook = new Book();108
 insertBook.Title = "重构";
            insertBook.Title = "重构";109
 insertBook.BorrowDate = Convert.ToDateTime("2009-3-1");
            insertBook.BorrowDate = Convert.ToDateTime("2009-3-1");110
 insertBook.ReturnDate = Convert.ToDateTime("2009-2-1");
            insertBook.ReturnDate = Convert.ToDateTime("2009-2-1");111
 insertBook.BorrowNum = "1";
            insertBook.BorrowNum = "1";112
 insertBook.ISBN = "111111";
            insertBook.ISBN = "111111";113
 bookXML.InsertBook(insertBook);
            bookXML.InsertBook(insertBook);114

115
 Int32 bookNum2 = bookXML.GetBookNum();
            Int32 bookNum2 = bookXML.GetBookNum();116

117
 bookXML.DeleteBookByRowIndex(bookNum2 - 1);
            bookXML.DeleteBookByRowIndex(bookNum2 - 1);118

119
 Int32 bookNum3 = bookXML.GetBookNum();
            Int32 bookNum3 = bookXML.GetBookNum();120

121
 Assert.AreEqual(bookNum1,bookNum3);
            Assert.AreEqual(bookNum1,bookNum3);122
 Assert.AreEqual(bookNum1 + 1, bookNum2);
            Assert.AreEqual(bookNum1 + 1, bookNum2);123
 }
        }124

125
 [Test]
        [Test]126
 public void TestGetSingleBookByRowIndex()
        public void TestGetSingleBookByRowIndex()127

 
         {
{128
 TestInsertBook();
            TestInsertBook();129
 }
        }130

131
 [Test]
        [Test]132
 public void DeleteBookByRowIndex()
        public void DeleteBookByRowIndex()133

 
         {
{134
 Book insertBook = new Book();
            Book insertBook = new Book();135
 insertBook.Title = "重构";
            insertBook.Title = "重构";136
 insertBook.BorrowDate = Convert.ToDateTime("2009-3-1");
            insertBook.BorrowDate = Convert.ToDateTime("2009-3-1");137
 insertBook.ReturnDate = Convert.ToDateTime("2009-2-1");
            insertBook.ReturnDate = Convert.ToDateTime("2009-2-1");138
 insertBook.BorrowNum = "2";
            insertBook.BorrowNum = "2";139
 insertBook.ISBN = "45454545";
            insertBook.ISBN = "45454545";140

141
 bookXML.InsertBook(insertBook);
            bookXML.InsertBook(insertBook);142
 Int32 bookNum1 = bookXML.GetBookNum();
            Int32 bookNum1 = bookXML.GetBookNum();143
 bookXML.DeleteBookByRowIndex(bookNum1 - 1);
            bookXML.DeleteBookByRowIndex(bookNum1 - 1);144
 Int32 bookNum2 = bookXML.GetBookNum();
            Int32 bookNum2 = bookXML.GetBookNum();145

146
 Assert.AreEqual(bookNum1, bookNum2 + 1);
            Assert.AreEqual(bookNum1, bookNum2 + 1);147

148
 }
        }149

150
 [Test]
        [Test]151
 public void TestDeleteAllBook()
        public void TestDeleteAllBook()152

 
         {
{153
 for (Int32 i = 0; i < 10; i++)
            for (Int32 i = 0; i < 10; i++)154

 
             {
{155
 Book insertBook = new Book();
                Book insertBook = new Book();156
 insertBook.Title = "重构";
                insertBook.Title = "重构";157
 insertBook.BorrowDate = Convert.ToDateTime("2009-3-1");
                insertBook.BorrowDate = Convert.ToDateTime("2009-3-1");158
 insertBook.ReturnDate = Convert.ToDateTime("2009-2-1");
                insertBook.ReturnDate = Convert.ToDateTime("2009-2-1");159
 insertBook.BorrowNum = "2";
                insertBook.BorrowNum = "2";160
 insertBook.ISBN = "45454545";
                insertBook.ISBN = "45454545";161

162
 bookXML.InsertBook(insertBook);
                bookXML.InsertBook(insertBook);163
 }
            }164

165
 bookXML.DeleteAllBook();
            bookXML.DeleteAllBook();166

167
 Int32 bookNum = bookXML.GetBookNum();
            Int32 bookNum = bookXML.GetBookNum();168

169
 Assert.AreEqual(0,bookNum);
            Assert.AreEqual(0,bookNum);170
 }
        }171

172
 [Test]
        [Test]173
 public void TestUpdataBookByRowIndex()
        public void TestUpdataBookByRowIndex()174

 
         {
{175
 Book insertBook = new Book();
            Book insertBook = new Book();176

177
 insertBook.Title = "重构";
            insertBook.Title = "重构";178
 insertBook.BorrowDate = Convert.ToDateTime("2009-3-1");
            insertBook.BorrowDate = Convert.ToDateTime("2009-3-1");179
 insertBook.ReturnDate = Convert.ToDateTime("2009-4-1");
            insertBook.ReturnDate = Convert.ToDateTime("2009-4-1");180
 insertBook.BorrowNum = "2";
            insertBook.BorrowNum = "2";181
 insertBook.ISBN = "45454545";
            insertBook.ISBN = "45454545";182

183
 bookXML.InsertBook(insertBook);
            bookXML.InsertBook(insertBook);184
 
            185
 Int32 insertBookIndex = bookXML.GetBookNum() - 1;
            Int32 insertBookIndex = bookXML.GetBookNum() - 1;186

187
 Book updateBook1 = bookXML.GetSingleBookByRowIndex(insertBookIndex);
            Book updateBook1 = bookXML.GetSingleBookByRowIndex(insertBookIndex);188
 updateBook1.Title = "update";
            updateBook1.Title = "update";189
 updateBook1.BorrowDate = Convert.ToDateTime("2009-3-1");
            updateBook1.BorrowDate = Convert.ToDateTime("2009-3-1");190
 updateBook1.ReturnDate = Convert.ToDateTime("2009-4-1");
            updateBook1.ReturnDate = Convert.ToDateTime("2009-4-1");191
 updateBook1.BorrowNum = "212";
            updateBook1.BorrowNum = "212";192
 updateBook1.ISBN = "222222";
            updateBook1.ISBN = "222222";193

194
 bookXML.UpdataBookByRowIndex(insertBookIndex, updateBook1);
            bookXML.UpdataBookByRowIndex(insertBookIndex, updateBook1);195

196
 Book updateBook2 = bookXML.GetSingleBookByRowIndex(insertBookIndex);
            Book updateBook2 = bookXML.GetSingleBookByRowIndex(insertBookIndex);197

198
 CompareBook(updateBook1, updateBook2);
            CompareBook(updateBook1, updateBook2);199

200
 bookXML.DeleteBookByRowIndex(insertBookIndex);
            bookXML.DeleteBookByRowIndex(insertBookIndex);201
 }
        }202

203

204
 //该类中很多方法都用到两个对象的比较,所以单独写成一个方法调用
        //该类中很多方法都用到两个对象的比较,所以单独写成一个方法调用205
 private void CompareBook(Book book1, Book book2)
        private void CompareBook(Book book1, Book book2)206

 
         {
{207
 Assert.AreEqual(book1.Title, book2.Title);
            Assert.AreEqual(book1.Title, book2.Title);208
 Assert.AreEqual(book1.BorrowDate,book2.BorrowDate);
            Assert.AreEqual(book1.BorrowDate,book2.BorrowDate);209
 Assert.AreEqual(book1.ReturnDate, book2.ReturnDate);
            Assert.AreEqual(book1.ReturnDate, book2.ReturnDate);210
 Assert.AreEqual(book1.BorrowNum,book2.BorrowNum);
            Assert.AreEqual(book1.BorrowNum,book2.BorrowNum);211
 Assert.AreEqual(book1.ISBN,book2.ISBN);
            Assert.AreEqual(book1.ISBN,book2.ISBN);212
 }
        }213
 }
    }214
 }
}215

UserXMLTest类:

 Code
Codeusing System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using LibraryHelper.Model;
namespace LibraryHelper.DAL.Test
{
[TestFixture]
public class UserXMLTest
{
UserXML userXML;
[TestFixtureSetUp]
public void InitUserXML()
{
userXML = new UserXML();
}
[Test]
public void TestGetUserAndSaveUser()
{
//先添加一个用户再取出来比较,所以这里可以一次测两个方法
User insertUser = new User();
insertUser.LoginID = "111111";
insertUser.Password = "000000";
//把insertUser保存进去
userXML.SaveUser(insertUser);
//把刚刚保存进去的user取出来
User getUser = userXML.GetUser();
Assert.AreEqual(insertUser.LoginID,getUser.LoginID);
Assert.AreEqual(insertUser.Password,insertUser.Password);
//比较完后清空数据
userXML.SaveUser(new User("", ""));
}
}
}
ADSLXMLTest类:

 Code
Code1
 using System;
using System;2
 using System.Collections.Generic;
using System.Collections.Generic;3
 using System.Text;
using System.Text;4

5
 using NUnit.Framework;
using NUnit.Framework;6
 using LibraryHelper.Model;
using LibraryHelper.Model;7

8
 namespace LibraryHelper.DAL.Test
namespace LibraryHelper.DAL.Test9


 {
{10
 [TestFixture]
    [TestFixture]11
 public class ADSLXMLText
    public class ADSLXMLText12

 
     {
{13
 ADSLXML adslXML;
        ADSLXML adslXML;14

15
 [TestFixtureSetUp]
        [TestFixtureSetUp]16
 public void InitadslXML()
        public void InitadslXML()17

 
         {
{18
 adslXML = new ADSLXML();
            adslXML = new ADSLXML();19
 }
        }20

21
 [Test]
        [Test]22
 public void TestAll()
        public void TestAll()23

 
         {
{ 24
 //这里先保存进去一个再取出来比较
            //这里先保存进去一个再取出来比较25
 adslXML.SaveADSL("connectionName", "userName", "userPassword");
            adslXML.SaveADSL("connectionName", "userName", "userPassword");26

27
 Assert.AreEqual("connectionName", adslXML.GetConnectionName());
            Assert.AreEqual("connectionName", adslXML.GetConnectionName());28
 Assert.AreEqual("userName", adslXML.GetUserName());
            Assert.AreEqual("userName", adslXML.GetUserName());29
 Assert.AreEqual("userPassword", adslXML.GetUserPassword());
            Assert.AreEqual("userPassword", adslXML.GetUserPassword());30

31
 //比较完后清空数据
            //比较完后清空数据32
 adslXML.SaveADSL("","","");
            adslXML.SaveADSL("","","");33
 }
        }34
 }
    }35
 }
}36

SettingXMLTest类:

 Code
Code1
 using System;
using System;2
 using System.Collections.Generic;
using System.Collections.Generic;3
 using System.Text;
using System.Text;4

5
 using NUnit.Framework;
using NUnit.Framework;6
 using LibraryHelper.Model;
using LibraryHelper.Model;7

8
 namespace LibraryHelper.DAL.Test
namespace LibraryHelper.DAL.Test9


 {
{10
 [TestFixture]
    [TestFixture]11
 public class SettingXMLTest
    public class SettingXMLTest12

 
     {
{13
 SettingXML setttingXML;
        SettingXML setttingXML;14

15
 [TestFixtureSetUp]
        [TestFixtureSetUp]16
 public void InitsettingXML()
        public void InitsettingXML()17

 
         {
{18
 setttingXML = new SettingXML();
            setttingXML = new SettingXML();19
 }
        }20

21
 [Test]
        [Test]22
 public void TestSetWarningDayAndGetWarningDay()
        public void TestSetWarningDayAndGetWarningDay()23

 
         {
{ 24
 //先把一个值加进去再取出来比较,所以这两个方法可以同时测试,以下测试方法一样
            //先把一个值加进去再取出来比较,所以这两个方法可以同时测试,以下测试方法一样25
 setttingXML.SetWarningDay("100");
            setttingXML.SetWarningDay("100");26

27
 Assert.AreEqual("100",setttingXML.GetWarningDay());
            Assert.AreEqual("100",setttingXML.GetWarningDay());28

29
 }
        }30

31
 [Test]
        [Test]32
 public void TestSetStartTypeAndGetStartType()
        public void TestSetStartTypeAndGetStartType()33

 
         {
{34
 setttingXML.SetStartType("0");
            setttingXML.SetStartType("0");35

36
 Assert.AreEqual("0",setttingXML.GetStartType());
            Assert.AreEqual("0",setttingXML.GetStartType());37

38
 }
        }39

40
 [Test]
        [Test]41
 public void TestSetLastStartTimeAndGetLastStartTime()
        public void TestSetLastStartTimeAndGetLastStartTime()42

 
         {
{43
 setttingXML.SetLastStartTime("2009-3-1");
            setttingXML.SetLastStartTime("2009-3-1");44

45
 Assert.AreEqual("2009-3-1",setttingXML.GetLastStartTime());
            Assert.AreEqual("2009-3-1",setttingXML.GetLastStartTime());46

47
 setttingXML.SetLastStartTime("");
            setttingXML.SetLastStartTime("");48
 }
        }49

50
 [Test]
        [Test]51
 public void TestSetDisconnectionADSLAndGetDisconnectionADSL()
        public void TestSetDisconnectionADSLAndGetDisconnectionADSL()52

 
         {
{53
 setttingXML.SetDisconnectionADSL("0");
            setttingXML.SetDisconnectionADSL("0");54

55
 Assert.AreEqual("0",setttingXML.GetDisconnectionADSL());
            Assert.AreEqual("0",setttingXML.GetDisconnectionADSL());56
 }
        }57

58

59
 }
    }60
 }
}61

 
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号