zoukankan      html  css  js  c++  java
  • VS2010(2012)中使用Unit Testing进行单元测试

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

    1、简单Demo:

        待测试类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace NUnitLab
    {
        public class MaxValue
        {
            // 将要测试的方法
            public static int Max(int[] list)
            {
                if (list == null)
                    return -1;
    
                int len = list.Length;
                if (len == 0)
                    return list[0];
    
                int i, max = int.MinValue;
                for (i = 0; i < len; i++)
                {
                    if (list[i] > max)
                        max = list[i];
                }
    
                return max;
            }
    
            public static int Min(int[] list)
            {
                return 0;
            }
    
            public static void Main()
            {
                
            }
        }
    }

       测试代码:

    using System;
    using System.Reflection;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using NUnitLab;
    
    namespace UnitTestProject
    {
        [TestClass()]
        public class TestMaxValue
        {
            [TestMethod]
            public void TestMax()
            {
                Assert.AreEqual(MaxValue.Max(new int[] {9, 9, 1}), 9);
                Assert.AreEqual(MaxValue.Max(new int[] { -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()]
        public class TestMaxValue
        {
            public TestContext TestContext { get; set; }
    
            [ClassInitialize()]
            public static void Init(TestContext context)
            {
                Console.WriteLine("Use ClassInitialize to run code before you run the first test in the class.");
            }
    
            [TestInitialize]
            public void BeforeTest()
            {
                Console.WriteLine("Use TestInitialize to run code before you run each test.");
            }
    
            [TestMethod]
            public void TestMax()
            {
                Assert.AreEqual(MaxValue.Max(new int[] {9, 9, 1}), 9);
                Assert.AreEqual(MaxValue.Max(new int[] { -1, 2, 1 }), 2);
                // 结果不明或者还未完成测试
                Assert.Inconclusive(string.Format("还未完成{0}方法的单元测试", MethodBase.GetCurrentMethod().Name));
            }

    [TestCleanup] public void AfterTest() { Console.WriteLine("Use TestCleanup to run code after you run each test."); } [ClassCleanup()] public static void 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))]
    public void TestExpectedException()
    {
       throw new ArgumentException("参数错误");
    }

     

    4、断言API

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

    alt

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

    alt

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

    alt

     

    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

  • 相关阅读:
    显示内容和隐藏v-show(以及图标的动态展示)
    主表查询子表
    怎么在pda安装apk
    java学习第40天2020/8/14
    Java学习第39天2020/8/13
    java学习第38天2020/8/12
    java学习第37天2020/8/11
    rz
    git tag
    audio vedio 播放
  • 原文地址:https://www.cnblogs.com/feichexia/p/DonetUnitTesting.html
Copyright © 2011-2022 走看看