美文网首页
VS-unit testing

VS-unit testing

作者: 发奋的三弟 | 来源:发表于2018-03-08 19:39 被阅读0次

    使用VS 2012自带的Unit Testing工具进行单元测试是非常方便的。网上关于这方面的例子很多,这篇随笔只起个人学习笔记之用,所以脉络不会很清晰。

    1、简单Demo:

        待测试类:

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace NUnitLab

    {

        publicclass MaxValue

        {

            // 将要测试的方法publicstaticintMax(int[] list)

            {

                if(list ==null)

                    return-1;

                intlen = list.Length;

                if(len ==0)

                    returnlist[0];

                inti, max =int.MinValue;

                for(i =0; i < len; i++)

                {

                    if(list[i] > max)

                        max = list[i];

                }

                return max;

            }

            publicstaticintMin(int[] list)

            {

                return0;

            }

            publicstaticvoid Main()

            {

            }

        }

    }

       测试代码:

    using System;using System.Reflection;using Microsoft.VisualStudio.TestTools.UnitTesting;using NUnitLab;namespace UnitTestProject

    {

        [TestClass()]

        publicclass TestMaxValue

        {        [TestMethod]

            publicvoid TestMax()

            {

                Assert.AreEqual(MaxValue.Max(newint[] {9,9,1}),9);

                Assert.AreEqual(MaxValue.Max(newint[] { -1,2,1}),2);        }    }

    }

    2、测试准备和测试清理工作

        如果我想在所有TestMethod执行前进行一些准备工作怎么办?答案是使用ClassInitialize。

        如果我想在所有TestMethod执行完成后进行一些清理工作怎么办?答案是使用ClassCleanup。

        如果我想在每个TestMethod执行前进行一些准备工作怎么办?答案是使用TestInitialize。

        如果我想在每个TestMethod执行完成后进行一些清理工作怎么办?答案是使用TestCleanup。

        如下:

    using System;using System.Reflection;using Microsoft.VisualStudio.TestTools.UnitTesting;using NUnitLab;namespace UnitTestProject

    {

        [TestClass()]

        publicclass TestMaxValue

        {

            publicTestContext TestContext {get;set; }

            [ClassInitialize()]

            publicstaticvoid Init(TestContext context)

            {

                Console.WriteLine("Use ClassInitialize to run code before you run the first test in the class.");

            }

            [TestInitialize]

            publicvoid BeforeTest()

            {

                Console.WriteLine("Use TestInitialize to run code before you run each test.");

            }

            [TestMethod]

            publicvoid TestMax()

            {

                Assert.AreEqual(MaxValue.Max(newint[] {9,9,1}),9);

                Assert.AreEqual(MaxValue.Max(newint[] { -1,2,1}),2);

                // 结果不明或者还未完成测试Assert.Inconclusive(string.Format("还未完成{0}方法的单元测试", MethodBase.GetCurrentMethod().Name));        }

            [TestCleanup]

            publicvoid AfterTest()

            {

                Console.WriteLine("Use TestCleanup to run code after you run each test.");

            }

            [ClassCleanup()]

            publicstaticvoid Cleanup()

            {

                Console.WriteLine("Use ClassCleanup to run code after all tests in a class have run.");

            }

        }

    }

    3、[ExpectedException]

        Unit Testing中的attribute除了最基本的TestClass、TestMethod以外,还有一些非常用但是可能有用的attribute。

        [ExpectedException(exceptionType: Type]可以用来表明某个测试方法预期抛出某个异常,并且只有真的抛出异常时才通过测试。比如下面:

    [TestMethod]

    [ExpectedException(typeof(ArgumentException))]publicvoid TestExpectedException()

    {

      thrownewArgumentException("参数错误");

    }

    4、断言API

        Assert类的静态方法如下,其中常用的包括AreEqual、AreNotEqual、AreSame、IsNull、IsTrue、Inconclusive和Fail

       针对集合类型的断言方法:

       针对字符串类型的断言方法:

    5、针对ASP.NET的单元测试

        这里推荐网上的一个系列博客,

    ASP.NET单元测试系列1(新手上路):http://blog.miniasp.com/post/2010/09/14/ASPNET-MVC-Unit-Testing-Part-01-Kick-off.aspx

    ASP.NET单元测试系列2(可测试性):http://blog.miniasp.com/post/2010/09/15/ASPNET-MVC-Unit-Testing-Part-02-Testability.aspx

    ASP.NET单元测试系列3(使用Mock):http://blog.miniasp.com/post/2010/09/16/ASPNET-MVC-Unit-Testing-Part-03-Using-Mock-moq.aspx

    ASP.NET单元测试系列4(单元测试的目的与价值):http://blog.miniasp.com/post/2010/09/17/ASPNET-MVC-Unit-Testing-Part-04-The-Purpose-and-Value.aspx

    ASP.NET单元测试系列5(了解Stub):http://blog.miniasp.com/post/2010/09/18/ASPNET-MVC-Unit-Testing-Part-05-Using-Stub-Object.aspx

    ASP.NET单元测试系列6(测试路由规则):http://blog.miniasp.com/post/2010/09/23/ASPNET-MVC-Unit-Testing-Part-06-Routing.aspx

    6、Visual Studio 2012 Fakes框架

    http://www.cnblogs.com/liuliuyingxia/archive/2012/08/26/2657515.html

    http://www.cnblogs.com/liuliuyingxia/archive/2012/08/25/2655856.html

    7、其他资源(MSDN)

    Real World Developer Testing with Visual Studio 2012:http://channel9.msdn.com/Events/TechEd/Europe/2012/AAP401

    Verifying Unit Testing by Using Unit Tests:http://msdn.microsoft.com/en-us/library/dd264975(v=vs.110).aspx

    转自:http://www.cnblogs.com/feichexia/archive/2012/11/21/DonetUnitTesting.html

    相关文章

      网友评论

          本文标题:VS-unit testing

          本文链接:https://www.haomeiwen.com/subject/ionyfftx.html