Unit断言学习

[TestMethod]—用于把一个方法标记为一个测试方法。当你运行你的测试时,仅标记有这个属性的方法才能够运行。 [TestClass]—用于把一个类标记为一个测试类。当你运行你的测试时,仅标记有这个属性的类才能够运行。 当构建测试时,你总是使用[TestMethod]和[TestClass]属性。然而,还存在其它若干有用的(但是可选的)测试属性。例如,你可以使用下列属性对来建立和简化你的测试: [AssemblyInitialize]和[AssemblyCleanup]—分别用于标记那些在一个程序集中的所有测试执行之前或之后要执行的方法 [ClassInitialize]和[ClassCleanup]—分别用于标记那些在一个类中的所有测试执行之前或之后要执行的方法 [TestInitialize]和[TestCleanup]—分别用于标记那些在一个特定的测试方法之前或之后要执行的方法 例如,你可能想创建一个虚构的HttpContext并使之应用于你所有的测试方法中。此时,你可以在一个标记有[ClassInitialize]属性的方法中建立该虚构的HttpContext,然后在一个标记有[ClassCleanup]属性的方法中释放此虚构的HttpContext。 此外,还存在若干属性你可以用于提供关于测试方法的额外信息。当你操作成百上千的单元测试时,你需要通过排序和过滤等方法来管理这些测试。此时,下面这些属性就变得相当有用: [Owner]—指定一个测试方法的作者 [Description]—提供一个测试方法的描述 [Priority]—能够使你为一个测试指定一个整数优先权   [TestProperty]—指定一个随意的测试属性 你可以在测试视图窗口或测试列表编辑器中使用这些属性来排序和过滤测试。 最后,还存在一个属性可以支持你当运行一个测试时忽略一个特定的测试方法。当你的一个测试出现问题并且你目前还不想处理该问题时,这个属性就变得相当有用的: ? [Ignore]—支持你临时性地禁用一个特定的测试。你可以把这个属性应用于一个测试方法或一个测试类之上。

Nunit一共有四个类断言类,分别是Assert、StringAssert、FileAssert和DirectoryAssert,它们都在NUnit.Framework命名空间,其中Assert是常用,也是我们最熟悉的,而另外三个断言类,顾名思义,分别对应于字符串的断言、文件的断言和目录的断言,理论上,仅Assert类就可以完成所有条件的判断,然而,如果合理的运用后面的三个断言,将使代码更加简洁、美观,也更加便于理解和维护。

Assert类:

1、AreEqual/AreNotEqual 相等不相等

2、AreSame/AreNotSame类判断

3、Contains判断一个对象是否存在于某对象(集合)

4、一系列条件判断:

IsTrue:判断条件为真

True:同上

IsFalse:判断条件为假

False:同上

IsNull:判断是否为空

Null:同上

IsNotNull:判断不为空间

NotNull:同上

IsNaN:判断数值是Nan

IsEmpty/IsNotEmpty:判断字符串是否为空/不为空

IsEmpty/IsNotEmpty:判断集合是否为空/不为空

5、比较大小

Greater:大于

GreaterOrEqual:大于等于

Less:小于

LessOrEqual:小于大于

6、IsInstanceOfType/ IsNotInstanceOfType是不是某一个类的实例

7、这几个比较有用,比如在调用被测试代码时,如果抛出异常,调用Fail()方法,则在失败的统计里,+1

Pass:强行让测试通过

Fail:强行让测试失败

Ignore:忽略该测试方法

Inconclusive:未验证该测试

CollectionAssert类

AllItemsAreInstancesOfType:集合中的各项是否是某某类型的实例

AllItemsAreNotNull:集合中的各项均不为空

AllItemsAreUnique:集合中的各项唯一

AreEqual:两个集合相等

AreEquivalent:两个集合相当

AreNotEqual:两个集合不相等

AreNotEquivalent:两个集合不相当

DoesNotContain:集合中不包含某对象

IsSubsetOf:一个集合是另外一个集合的子集

IsNotSubsetOf:一个集合不是另外一个集合的子集

IsEmpty:集合为空

IsNotEmpty:集合不为空

IsOrdered:集合的各项已经排序

特性:

[TestFixture]/[Explicit]:声明一个类是测试类/声明一个类只有在UI界面被选中时才执行

[TestFixtureSetup]/[TestFixtureTearDown]:在测试开始前/结束后要执行的操作,一个TestFixture只能有一个TestFixtureSetup或TestFixtureTearDown。

[Test]/[Ignore]:是测试方法/忽略掉,测试时不执行

[Setup]/[TearDown]:每个测试方法在执行前/结束后要执行的操作

方法名(([Values(1, 2, 3)] int x)

[Range]:生成某个数据范围内的子测试,如

TestPrintColsole([Range(0.2, 0.6, 0.2)] double d):生成0.2,0.4,0.6三个子测试用例
TestPrintColsole([Values(1, 2, 3, 4, 5, 6)] int x, [Range(0.2, 0.6, 0.2)] double d):两个Attribuee结合,共生成18个子测试用例

[Random]:在某个范围内随机生成测试用例,

TestPrintColsole([Random(-1.0, 1.0, 5)] double d):-1到1之间生成5个测试用例
TestPrintColsole([Values(1, 2, 3, 4, 5, 6)] int x, [Random(-1.0, 1.0, 5)] double d) :共生成30个子测试用例


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端技术探索

彻底掌握解释性语言&编译性语言,动态&静态语言

编译型和解释型的定义是对立存在的,但也可以在一个语言中同时存在。比如 java 语言同时兼有编译型和解释型特点。整个流程如下:

1065
来自专栏chenssy

【死磕Java并发】-----Java内存模型之重排序

在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 1. 在单线程环境...

1522
来自专栏chenssy

【死磕Java并发】—–Java内存模型之重排序

在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改...

2586
来自专栏C/C++基础

Linux命令(2)——od命令

od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。od命令系统默认的...

1073
来自专栏生信宝典

Linux学习 - SED操作,awk的姊妹篇

awk和sed想一对兄妹,一个出现,就会问起另一个。现在,都来了。 sed基本参数解释 sed是stream editor的简称,擅长对文件进行各种正则操作、插...

2186
来自专栏PHP在线

php日常使用总结

Private(私有): 只能在这个当前类的内部读取、修改。 Protected(受保护):能够在这个类和类的子类中读取和修改。 在方法内部通过 $this...

3738
来自专栏架构之路

C++的extern关键字知识点

转载自http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html 感觉写的比百毒上搜...

3344
来自专栏Vamei实验室

Python标准库08 多线程与同步 (threading包)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Python主要通过标准库中的thread...

2665
来自专栏青玉伏案

iOS开发之Runtime常用示例总结

经常有小伙伴私下在Q上问一些关于Runtime的东西,问我有没有Runtime的相关博客,之前还真没正儿八经的总结过。之前只是在解析第三方框架源码时,聊过一些用...

2069
来自专栏哲学驱动设计

模式应用:自定义匹配

    本篇博客记录了我在工作过程中的一个设计单元。 需求 GIX4项目中需要为非国标清单进行匹配,用户自定义匹配规则。规则可以被存储到数据库中,下次重复使用...

2065

扫码关注云+社区

领取腾讯云代金券