码迷,mamicode.com
首页 > Windows程序 > 详细

C#单元测试

时间:2015-03-03 01:08:17      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

1.使用vs自带的单元测试组件。

 项目引用Microsoft.VisualStudio.TestTools.UnitTesting。
 在测试类上标记TestClass附加属性,在需要测试的方法上标记TestMethod附加属性
【测试】-【运行】-【所有测试】,如图所示,也可以选择分析代码覆盖率,看当前测试运行覆盖的代码比率。
技术分享

说明:

1.在方法中使用Assert这个静态类进行测试,里面提供了许多供测试使用的静态方法:
    技术分享
2.测试的方法必须是void的,不带有返回类型,如图所示:
    技术分享

2.使用NUnit

  在http://www.nunit.org/index.php?p=download下载安装包,安装之后,在项目中引用安装目录中的nunit.framework.dll。然后在类中using NUnit.Framework;
  在测试类上标记TestFixture附加属性,在需要测试的方法是标记Test附加属性。

测试操作有两种形式

a.测试项目为exe或者dll类库。编译生成之后,打开nunit.exe程序,然后选择Open Project,然后文件类型选择程序集,打开C#项目编译生成的exe或者dll文件:
    技术分享
b.打开项目的属性页,【调试】-【启动操作】部分,选择启动外部程序,然后选择nunit.exe程序。这样F5调试的时候,可以直接用nunit打开,查看单元测试的执行信息
    技术分享
    技术分享

说明:

1.和Microsoft.VisualStudio.TestTools.UnitTesting的使用类似,也是使用Assert这个类中提供的静态方法进行测试,稍有不同的是这个Assert不是静态类:
    技术分享
对比Microsoft.VisualStudio.TestTools.UnitTesting的Assert静态类,可以发现提供的静态方法大体一致,甚至连形参名称都相同。
2.测试的方法同样必须是void的。可以验证:给一个有返回值的方法标记Test附加属性。
        [Test]
        public int TestNUnit4()
        {
            Assert.Greater(10, 11, "不知道具体结果");
            return 1;
        }

运行之后,如图所示,会提示相应的测试方法运行不了,(注意是Invalid,而不是断言失败的Failed),原因是方法有一个非空的返回类型,而nunit期望的是无返回结果的方法。

技术分享

3.如果想让某个方法暂时不运行测试(或者说测试的时候忽略),可以给它附加了Ignore属性。

        [Test]
        [Ignore("the method is not ready yet")]//方法标记Ignore属性,会在nunit中忽略这个方法的运行,呈现黄色。
        public void TestNUnit3()
        {
            Assert.AreEqual(10, 11, "it is not equal");
        }
技术分享
注意:Ignore属性可以附加在方法上,也可以附加在类上,这样整个类中的测试方法都会忽略测试运行。
如下所示:
    [TestFixture]
    [Ignore("the class is not ready yet")]
    public class Test
    {
        
        [Test]
        public void TestNUnit()
        {
            Console.WriteLine("12121");
            Assert.AreEqual(1, 2, "it is not equal");
        }
        [Test]
        public void TestNUnit1()
        {
            Assert.AreEqual(1, 1 ,"it is not equal");
        }
        [Test]
        public void TestNUnit2()
        {
            Assert.AreEqual(1, Assert.Counter);
        }
        .
        .
        .
    }

技术分享

4.Errors and Failures中会显示测试方法在发生错误和断言失败的情况下的信息
如下代码:
        [Test]
        public void Method1()
        {
            var a = 1;
            var b = 0;
            var test = a / b;
            Assert.Pass("assert pass");
        }

技术分享

5.Text Output中会显示测试运行中输出的内容。
代码如下:
    [TestFixture]
    public class Test
    {
        [Test]
        public void TestNUnit()
        {
            Console.WriteLine("12121");
            Assert.AreEqual(1, 2, "it is not equal");
        }

        //省略其他测试方法...

        [SetUp]
        public void SetUp()
        {
            Console.WriteLine("SetUp");
        }

        [TearDown]
        public void TearDown()
        {
            Console.WriteLine("TearDown");
        }

    }

运行效果如图:

技术分享

其中有SetUp、TearDown两个输出。附加属性SetUp的作用是在每个测试运行之前执行,可用作初始化工作;TearDown则是在每个测试运行之后执行,可用作释放资源。还有两个附加属性:TestFixtureSetUp和TestFixtureTearDown同样提供相同的目的,不过是在test fixture范围下。
 

C#单元测试

标签:

原文地址:http://www.cnblogs.com/xtechnet/p/CSharpUnitTest.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!