zoukankan      html  css  js  c++  java
  • Visual Studio 2012使用NUnit单元测试实践01,安装NUnit并使用


     

    在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单元测试艺术,等等。

  • 相关阅读:
    hdu 5696 区间的价值 单调栈+rmq
    bzoj 3039: 玉蟾宫 单调栈或者悬线法求最大子矩阵和
    bzoj 2435: [Noi2011]道路修建 dfs
    Codeforces gym 100971 D. Laying Cables 单调栈
    codeforces GYM 100971F 公式题或者三分
    UVA 10539
    BZOJ 1079: [SCOI2008]着色方案 DP
    UVA 11426
    UVA 11728
    UVA 10090
  • 原文地址:https://www.cnblogs.com/darrenji/p/4519366.html
Copyright © 2011-2022 走看看