VS2010(2012)中使用Unit Testing进行单元测试

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

原文 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

目录
相关文章
|
11天前
|
安全 测试技术 Go
Golang深入浅出之-Go语言单元测试与基准测试:testing包详解
【4月更文挑战第27天】Go语言的`testing`包是单元测试和基准测试的核心,简化了测试流程并鼓励编写高质量测试代码。本文介绍了测试文件命名规范、常用断言方法,以及如何进行基准测试。同时,讨论了测试中常见的问题,如状态干扰、并发同步、依赖外部服务和测试覆盖率低,并提出了相应的避免策略,包括使用`t.Cleanup`、`t.Parallel()`、模拟对象和检查覆盖率。良好的测试实践能提升代码质量和项目稳定性。
16 1
|
6月前
|
Cloud Native 测试技术 Go
什么是单元测试(unit testing)
什么是单元测试(unit testing)
|
测试技术 Go
Golang:testing单元测试的使用示例
Golang:testing单元测试的使用示例
61 0
Golang:testing单元测试的使用示例
|
测试技术 PHP
TP5.0安装testing 单元测试 报错
原因:使用了比较高版本的php,topthink/tesing v1.x仅限php7.1使用 太高太低都会出现报错
96 0
|
敏捷开发 测试技术 C#
Visual Studio 中的单元测试 UNIT TEST
TDD(Test-Driven Development) 测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。单元测试是最基本的测试步骤。位于整个产品开发流程V模型的最底部。
Visual Studio 中的单元测试 UNIT TEST
|
测试技术
SAP Spartacus B2B Organization unit 单元测试 b2b-user.selector.spec.ts launcher
SAP Spartacus B2B Organization unit 单元测试 b2b-user.selector.spec.ts launcher
168 0
|
测试技术
Angular单元测试框架karma-jasmine里类似ABAP unit框架的setup和class_setup方法
Angular单元测试框架karma-jasmine里类似ABAP unit框架的setup和class_setup方法
Angular单元测试框架karma-jasmine里类似ABAP unit框架的setup和class_setup方法
|
Java 测试技术 Apache
ABAP和Java的单元测试Unit Test
ABAP和Java的单元测试Unit Test
ABAP和Java的单元测试Unit Test
|
测试技术
SAP Spartacus B2B Organization unit 单元测试 b2b-user.selector.spec.ts launcher
SAP Spartacus B2B Organization unit 单元测试 b2b-user.selector.spec.ts launcher
79 0
SAP Spartacus B2B Organization unit 单元测试 b2b-user.selector.spec.ts launcher
|
1月前
|
Java 测试技术 开发者
Java单元测试与集成测试:确保代码质量的最佳实践
【4月更文挑战第2天】在软件开发中,单元测试验证单个代码单元(如Java类或方法)的功能,确保其正确性;而集成测试则关注多个组件协作时的交互。JUnit是常见的Java单元测试框架,集成测试则检验组件间接口的兼容性。Spring框架提供了集成测试的支持。遵循良好编码习惯,编写可测试代码,设计全面的测试用例,是保证代码质量和稳定性的关键。