单元测试

来源:互联网 发布:编写程序软件 编辑:程序博客网 时间:2024/04/28 13:04

TheServerSide.Net上有一篇不错的文章,“10 Ways to Make Your Code More Testable”(10种让你的代码更具可测性的方法),这10种方法中,有几项不但是让代码更具可测性的方法,也是写代码时必需遵循的基本Principla,但也有几项非常有意思的:

只要可行,就让方法返回一个值。这样不但可以让代码更加容易被测试,而且也更加容易让调用者了解它的运行状态。不过作者也说了这个方法并非是“非此即彼”,而是“as much as possible”。

对于牵涉到包含了数据库的操作,这篇文章提出的解决方法就是很常见的Mock Data Access Object,即在测试时使用一个并非真正去读写数据库的假数据存取对象,来模拟真正的DAO的行为。

说到牵涉到数据存取的测试,在单元测试领域这的确是一个容易让人挠头的问题。在这里我郑重推荐MbUnit这个工具,它内置了两种最常见的解决这个问题的方法,使我们的日子更轻松了。

1、RollBackAttribute,这个特性利用COM+的Transaction,将整个测试方法的操作置于一个事务里面,来达到自动回滚的目的。

[Test]
[RollBack]
public void TestMethod()

Roy Osherove一篇文章比较详细的对这种方法进行了描述。

2、完整恢复数据库,这个方法基于一种很简单的数据恢复方式:在某个地方(通常是测试开始前或结束后),让数据库根据我们提供的Backup文件自动恢复。

[TestFixture]
[SqlRestoreInfo("connectionstring","databasename",@"c:/db.bak")]
public class TestClass
{

    [Test]
    [RestoreDatabaseFirst]
    public void TestMethod()

“SqlRestoreInfo”特性提供了必要的连接字符串、数据库名,和数据库备份文件信息,“RestoreDatabaseFirst”特性指明了在执行测试方法前先用备份文件来恢复数据库。

最后,介绍一个系列文章,Automating Unit Testing With a Base Class Posts,讲解了一个进行“自动化”测试的方法。

原创粉丝点击