zoukankan      html  css  js  c++  java
  • 单元测试...

    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,讲解了一个进行“自动化”测试的方法。

  • 相关阅读:
    Go语言 0 前言
    SVM支持向量机的基本原理
    支持向量机通俗介绍
    线程句柄和线程ID的区别
    分布式事务一致性,事务补偿实战
    ResultSet is from UPDATE. No Data.
    linux 批量kill进程
    mysql数据表拷贝
    Maven assembly 打包
    JS 删除对象属性
  • 原文地址:https://www.cnblogs.com/kaneboy/p/2436783.html
Copyright © 2011-2022 走看看