首页 > 学院 > 开发设计 > 正文

C#单元测试

2019-11-17 02:32:51
字体:
来源:转载
供稿:网友

C#单元测试

2015-03-02 23:58 by xtechnet, ... 阅读, ... 评论, 收藏, 编辑

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范围下。参考:http://confach.VEVb.com/archive/2005/06/20/177817.aspx
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表