VS2010(2012)中使用Unit Testing进行单元测试
2014-02-10 21:29
309 查看
原文 VS2010(2012)中使用Unit Testing进行单元测试
使用VS 2012自带的Unit Testing工具进行单元测试是非常方便的。网上关于这方面的例子很多,这篇随笔只起个人学习笔记之用,所以脉络不会很清晰。
1、简单Demo:
待测试类:
测试代码:
2、测试准备和测试清理工作
如果我想在所有TestMethod执行前进行一些准备工作怎么办?答案是使用ClassInitialize。
如果我想在所有TestMethod执行完成后进行一些清理工作怎么办?答案是使用ClassCleanup。
如果我想在每个TestMethod执行前进行一些准备工作怎么办?答案是使用TestInitialize。
如果我想在每个TestMethod执行完成后进行一些清理工作怎么办?答案是使用TestCleanup。
如下:
3、[ExpectedException]
Unit Testing中的attribute除了最基本的TestClass、TestMethod以外,还有一些非常用但是可能有用的attribute。
[ExpectedException(exceptionType: Type]可以用来表明某个测试方法预期抛出某个异常,并且只有真的抛出异常时才通过测试。比如下面:
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
使用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
针对集合类型的断言方法:
针对字符串类型的断言方法:
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
相关文章推荐
- VS2010(2012)中使用Unit Testing进行单元测试
- VS2010(2012)中使用Unit Testing进行单元测试
- VS2012下使用Moq进行单元测试
- VS2010中使用CLR单元测试框架进行C++测试
- VS2012 Unit Test(Void, Action, Func) —— 对无返回值、使用Action或Func作为参数、多重载的方法进行单元测试
- 使用Mock对接口(controller层)进行单元测试
- 使用Xunit来进行单元测试
- 使用 VS2010 在 SQL 2008 R2 上进行应用开发
- 怎样使用 Junit Framework 进行单元测试的编写
- 使用Junit对Spring进行单元测试实战小结
- 使用NUnit在.Net编程中进行单元测试(转载)
- Eclipse使用JUnit4进行单元测试
- 使用junit框架对安卓应用进行单元测试 20150412
- 在Eclipse中使用JUnit4进行单元测试(中级篇)
- Maven项目在eclipse中使用junit进行单元测试时报错:ClassNotFoundException
- Spring 使用Junit 进行单元测试
- 使用xUnit为.net core程序进行单元测试(2)
- 使用H2数据库进行单元测试
- C#中使用NUnit进行单元测试
- 使用xUnit为.net core程序进行单元测试(1)