既然是从零开始就先介绍一下NUnit ()一个NET 框架下的单元测试框架提供了类似于 JUnit的功能也是 NET 框架下开发者应用最广泛的单元测试框架之一(其他的还包括 CSUnit 等等) 它的基本原理是通过 NET 的反射机制利用代码中的元数据(Attribute)来辨识到底有哪些单元测试单元测试(Unit Test)是测试驱动开发(TestDriven DevelopmentTDD)很重要的一环而TDD又是敏捷开发方法(比如极限编程eXtreme Programming)的重要组成部分…… 总之单元测试很重要就对了 ^_^ (有关TDDXP的详细介绍在博客园的很多blog上就有当然 google 上就更多了) 例子开始 下载安装 NUnit(最新版可能是 ) 很重要的步骤测试一下 NUnit 是否安装成功 方法打开 NUnitFileOpen选 NUnit 安装目录下的bin目录中的 nunittestsdll这时NUnit 主窗口左部的树型列表中会出现很多个测试的名字然后点 Run 按钮接着测试就开始运行了直到 NUnit 主窗口左部的树型列表中所有的测试前面都变成绿色那就是成功了(失败的测试会有红色的提示没有运行的测试会有黄色的提示在这一步中有可能 Console Runner 那个测试集合会出现问题万一出现问题重启一下 NUnit 再 Run一般都是没问题的) 怎么在开发中使用 NUnit 框架? )打开VSNET 新建一个 C# 的 Console 项目在项目的 References 添加 nunitframework(References 在 Solution Explorer 窗口中右键Add Reference) )随便写一个类 public class Account // 银行帐户类 { private float balance; // 账户的余额 public void Deposit(float amount) // 存钱 { balance+=amount; } public void Withdraw(float amount) //取钱 { balance=amount; } public void TransferFunds(Account destination float amount) // 转账 { destinationDeposit(amount); Withdraw(amount); } public float Balance { get{ return balance; } } public static void Main(string[] args) { Account source = new Account(); // 新建个账户 sourceDeposit(F); // 存 Account destination = new Account(); // 又建了一个 destinationDeposit(F); // 存 sourceTransferFunds(destination F); // 第一个账户转给第二个 } } 这个类很简单编译通过运行一切ok )在同一个项目中增加一个用来测试 Account 类中的方法的测试类(里面的几个Attribute是最关键的) using NUnitFramework; // 千万别忘了这一行 [TestFixture] // 这个Attribute说明 AccountTest 类中包含有测试 public class AccountTest { [Test] // 这个Attribute说明了 TestTransferFunds() 方法就是用来做测试的 // 一般测试方法的名字就是在被测试方法名前加上Test public void TestTransferFunds() { // 准备工作 Account source = new Account(); sourceDeposit(F); Account destination = new Account(); destinationDeposit(F); sourceTransferFunds(destination F); // 转账 // 利用 NunitFramework 中的 Assert 类看看转账以后两个账户的余额是否正确 AssertAreEqual(F destinationBalance); AssertAreEqual(F sourceBalance); } } 然后编译一下生成一个 exe 文件(如果要生成 DLL 的话更改一下这个这个项目的 Output Type属性改成 Class Library就可以了这个改动还是在Solution Explorer 窗口中项目名上 右键属性 对于这个例子生成DLL的话就不需要 Main() 方法了) )打开NUnitFileOpen找到刚才编译生成的 exe然后 Run满眼可爱的绿色 就说明测试都成功了^_^ 如果想看看测试失败的样子可以把 AssertAreEqual() 里面的值改一下…… 例子中只用到了 Test Fixture 和 Test 这两个Attribute其他更多的用法在 NUnit 文档中写得十分清楚文档中也有些更好的例子…… 自动化的单元测试有什么用? 答省时省力当一个系统需要测试的类/方法 成千上万时手工的测试方法(用控制台打印出信息等等)的效率会比较低 总结NUnit 很好的利用了反射机制单元测试十分方便但是对于复杂的对象写出低耦合的测试代码可能有一定难度 |