在Visual Studio 2012中,默认使用Microsoft自带的MS-Test测试框架。但,Visual Studio同样允许使用第三方测试框架,比如NUnit,xUnit,MbUnit,等等。本篇体验使用NUnit进行单元测试。

在Visual Studio中创建一个解决方案。

在解决方案下添加一个名称为"LogAn"的类库。

创建名称为LogAnalyzer的类,编写如下:

namespace LogAn
{
    public class LogAnalyzer
    {
        public bool IsValidLogFileName(string fileName)
        {
            if (!fileName.EndsWith(".SLF"))
            {
                return false;
            }
            return true;
        }
    }
}

生成"LogAn"的类库项目。

在解决方案下添加一个"单元测试项目"。

接下来需要安装"NUnit Test Adapter", "NUnit Test Adapter"是介于NUnit和Visual Studio之间的一个适配器。依次点击"工具"、"扩展和更新",从中搜索并安装"NUnit Test Adapter"。

安装完毕,需要重启Visual Studio 2012。

在单元测试项目下,通过NuGet安装NUnit。

在单元测试项目下引用"LogAn"的类库。

编写一个测试类和测试方法,单元测试的命名规则有一定的约定,比如说:类名_目的_期望的结果,遵循这个命名规则:

Order_NumberOfOrders_GreaterThanZero_Success

以下是测试类和测试方法:

using LogAn;
using NUnit.Framework;

namespace MyFirstTestProject
{
    [TestFixture]
    public class LogAnalyzerTests
    {
        [Test]
        public void IsValidFileName_validFile_ReturnsTrue()
        {
            //Arrange
            LogAnalyzer analyzer = new LogAnalyzer();

            //Act
            bool result = analyzer.IsValidLogFileName("whatever.slf");

            //Assert
            Assert.IsTrue(result,"包含正确的后缀名");
        }
    }
}

生成单元测试项目。

点击Visual Studio 2012左上角的"测试资源管理器",点击"运行"。

显示未通过测试。

修改类库中的代码如下:

if (!fileName.ToLower().EndsWith(".slf"))

并重新生成类库。

再次运行单元测试项目,显示通过。

在单元测试中,如果一个测试中遗留了一些数据、状态或对象实例,可能会导致其它测试的失败。而定位测试之间的依赖性也是很困难的。解决办法是让所有测试之间没有任何依赖关系。NUnit为此提供了[Setup]和[TearDown]这两个特性,旨在某个测试方法执行之前做一些初始化工作,执行之后做一些清理工作。于是,现在测试代码可以修改成如下:

using LogAn;
using NUnit.Framework;

namespace MyFirstTestProject
{
    [TestFixture]
    public class LogAnalyzerTests
    {
        private LogAnalyzer m_anylyzer = null;

        [SetUp]
        public void Setup()
        {
            m_anylyzer = new LogAnalyzer();
        }


        [Test]
        public void IsValidFileName_validFile_ReturnsTrue()
        {

            //Act
            bool result = m_anylyzer.IsValidLogFileName("whatever.slf");

            //Assert
            Assert.IsTrue(result,"包含正确的后缀名");
        }

        [Test]
        public void IsValidFileName_validFileUpperCased_ReturnsTrue()
        {
            bool result = m_anylyzer.IsValidLogFileName("whatever.SLF");
            Assert.IsTrue(result, "包含正确的后缀名");
        }

        [TearDown]
        public void TearDown()
        {
            m_anylyzer = null;
        }
    }
}

参考资料:

.NET单元测试艺术,等等。

Visual Studio 2012使用NUnit单元测试实践01,安装NUnit并使用的更多相关文章

  1. Microsoft Visual Studio 2012 Update 4 RC 3 离线安装程序

    Microsoft Visual Studio 2012 Update 4 RC 3 离线安装程序 ☆ 微软官网地址:☆ http://www.microsoft.com/en-us/download ...

  2. ArcGIS 10.2 二次开发,兼容Visual Studio 2012二次开发,完美安装教程

    GIS 经常安装是常有的事,每次重装系统都要浪费大半天去安装这个.所以凑这一次安装,把这个软件重新安装的步骤整理了一下,希望对大家有所帮助.这次整理的内容的关键优点是,对常见的出错内容进行了归纳整理. ...

  3. 在Visual Studio 2012中使用VMSDK开发领域特定语言(一)

    前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modeling SDK进行领域特定语言(DSL)的开发,包括两个部分的内容.在第一部分中,将对 ...

  4. 在Visual Studio 2012中使用VMSDK开发领域特定语言1

    在Visual Studio 2012中使用VMSDK开发领域特定语言(一)   前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modelin ...

  5. Visual Studio 2012简体中文专业版密钥(激活码)

    VS2012 正式版在Beta版的基础上进行了很多改进,尤其是加入了全新的用户界面. VS2012 的硬件需求与VS2010相同,不过由于 Visual Studio 2012 利用了新版 Windo ...

  6. [Visual Studio] 开启Visual Studio 2012通过右键菜单创建单元测试(Unit Test)

    Visual Studio 2012可以说是迄今为止微软VS开发工具中用户体验最好的产品,无论是速度还是体验以及功能,都非常出色,但是,使用了一段时间后发现有一个之前版本VS都有的功能却在Visual ...

  7. Visual Studio 2012 Fakes框架测试驱动开发TDD教程

    一.前言 最近团队要尝试TDD(测试驱动开发)的实践,很多人习惯了先代码后测试的流程,对于TDD总心存恐惧,认为没有代码的情况下写测试代码时被架空了,没法写下来,其实,根据个人实践经验,TDD并不可怕 ...

  8. SQL Server Data Tools – Business Intelligence for Visual Studio 2012安装时提示“The CPU architecture....”的解决方法

    SQL Server Data Tools – Business Intelligence for Visual Studio 2012,一个很强大的工具,下载地址:http://www.micros ...

  9. 用Visual Studio 2012+Xamarin搭建C#开发Andriod的环境

    第一步:安装Visual Studio: Visual Studio 2012(或者Visual Studio 2010),原因是目前为止Xamarin for Visual Studio的插件只支持 ...

随机推荐

  1. CasperJS API中文博客链接

    http://www.cnblogs.com/reach296/tag/Casperjs/

  2. ZJOI2019爆蛋记

    Day-2 玩了一个下午,逛了填海校园,晚上吃肯德基 Day-1 上午听lyx巨佬讲课,讲到一半发现,越听越听不懂... 于是打开电脑开始刷知乎 下午听kcz孔爷讲课,emmmm电脑被我玩没电了... ...

  3. scp拷贝文件报错-bash: scp: command not found

    今天用scp远程传输资料,报错如下: -bash: scp: command not found 在网上搜资料解决办法如下: 安装scp的软件包: # yum install openssh-clie ...

  4. redis 配置文件翻译

    2014年6月24日 17:29:11 include  如果有其它配置文件,可以使用 include 指令 ####通用配置 daemonize  默认的redis不会以守护进程运行,需要这样的话可 ...

  5. 过滤掉文本中的javascript标签代码

    2014年1月21日 11:51:19 php代码: $content = preg_replace('#<\s*[script].*>#', '', $a);//有些攻击可以在scrip ...

  6. Objective-C 与JAVA的SHA1/HmacSHA1加密算法实现

    最近研究IOS手机上登录的功能.由于加密方式使用SHA1算法.网上也没找到直接的例子,最终参照StackoverFlow上的大神,完成了加密实现. 先上代码: //HmacSHA1加密: +(NSSt ...

  7. ACM-ICPC 2018年北京网络赛 D-80 days

    题意: n个城市环形连接,初始有c的钱,每到i城市,会获得a[i]的金钱,失去b[i]的金钱,问能否走遍这n个城市,且过程中金钱不为负数,输出起始城市,如果答案有多个,输出最小的数字. 思路:a[i] ...

  8. 解决tomcat 启动 一闪而过

    有的朋友在启动Tomcat的时候会出现问题. 1例如: 手动点击startup.bat 后 ,一闪而过 2例如:在cmd下 进到tomcat的bin目录 运行 startup.bat ,然后输出 了J ...

  9. 带你走进Android Afinal框架的世界

    1.什么是Afinal框架? Afinal是一个开源的android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少.在android应用开发中,通过Afinal的ioc框架,诸如ui绑定 ...

  10. CentOS7.x使用overlay文件系统

    https://www.cnblogs.com/yufeng218/p/8370670.html http://www.cnblogs.com/lehuoxiong/p/9908118.html ht ...