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

  • 相关阅读:
    Uva 10779 collector's problem
    poj 2728 最优比率树(最小生成树问题)
    LA 3126 二分图匹配 最小路径覆盖
    poj 1149 最大流构图
    Step By Step(Java XML篇)
    Step By Step(Java 输入输出篇)
    Step By Step(Java 集合篇)
    Step By Step(Java 线程篇)
    Step By Step(Java 反射篇)
    Step By Step(Java 国际化篇)
  • 原文地址:https://www.cnblogs.com/darrenji/p/4519366.html
Copyright © 2011-2022 走看看