XUnit入门

1.如果之前安装了xUnit.net Visual Studio Runner扩展包,通过"工具"菜单下的"扩展和更新"先将该扩展包卸载。

2.删除临时目录中的指定文件夹:%TEMP%\VisualStudioTestExplorerExtensions

安装Xunit:

Xunit的安装现在不需要插件支持了,直接使用NuGet安装如下两个库即可:

• PM> Install-Package xunit

• PM> Install-Package xunit.runner.visualstudio -Pre (Visual Studio测试浏览器支持, VS2015目前必须装Pre的)

Comparing xUnit.net to other frameworks

Attributes

Note: This table was written back when xUnit.net 1.0 has shipped, and needs to be updated with information regarding the latest versions of the unit testing frameworks.

NUnit 2.2

MSTest 2005

xUnit.net 2.x

Comments

[Test]

[TestMethod]

[Fact]

Marks a test method.

[TestFixture]

[TestClass]

n/a

xUnit.net does not require an attribute for a test class; it looks for all test methods in all public (exported) classes in the assembly.

[ExpectedException]

[ExpectedException]

Assert.Throws
Record.Exception

xUnit.net
has done away with the ExpectedException attribute in favor of Assert.Throws. See Note 1

[SetUp]

[TestInitialize]

Constructor

We
believe that use of [SetUp] is generally bad. However, you
can implement a parameterless constructor as a direct replacement. See Note 2

[TearDown]

[TestCleanup]

IDisposable.Dispose

We
believe that use of [TearDown] is generally bad. However, you
can implement IDisposable.Dispose as a direct replacement. See Note 2

[TestFixtureSetUp]

[ClassInitialize]

IClassFixture<T>

To get
per-class fixture setup, implement IClassFixture<T> on your test class. See Note 3

[TestFixtureTearDown]

[ClassCleanup]

IClassFixture<T>

To get
per-class fixture teardown, implement IClassFixture<T> on your test class. See Note 3

n/a

n/a

ICollectionFixture<T>

To get
per-collection fixture setup and teardown, implement ICollectionFixture<T> on your test collection. See Note 3

[Ignore]

[Ignore]

[Fact(Skip="reason")]

Set the
Skip parameter on the [Fact] attribute to temporarily skip
a test.

[Property]

[TestProperty]

[Trait]

Set
arbitrary metadata on a test

n/a

[DataSource]

[Theory]
[XxxData]

Theory
(data-driven test). See Note 4

Attribute Notes

Note 1: Long-term use of [ExpectedException] has uncovered various problems
with it. First, it doesn’t specifically say which line of code should throw the
exception, which allows subtle and difficult-to-track failures that show up as
passing tests. Second, it doesn’t offer the opportunity to fully inspect
details of the exception itself, since the handling is outside the normal code
flow of the test. Assert.Throws allows you to test a specific set of code
for throwing an exception, and returns the exception during success so you can
write further asserts against the exception instance itself.

Note 2: The xUnit.net team feels that
per-test setup and teardown creates difficult-to-follow and debug testing code,
often causing unnecessary code to run before every single test is run. For more
information, see http://jamesnewkirk.typepad.com/posts/2007/09/why-you-should-.html.

Note 3: xUnit.net provides a new way to
think about per-fixture data with the use of the IClassFixture<T> and ICollectionFixture<T> interfaces. The runner will
create a single instance of the fixture data and pass it through to your
constructor before running each test. All the tests share the same instance of
fixture data. After all the tests have run, the runner will dispose of the
fixture data, if it implements IDisposable. For more information, see Shared Context.

Note 4: xUnit.net ships with support for
data-driven tests call Theories. Mark your test with the [Theory] attribute (instead of [Fact]), then decorate it with one or
more [XxxData] attributes, including [InlineData] and [MemberData]. For more information, see Getting Started.

Assertions

Note: this
table was written back when xUnit.net 1.0 has shipped, and needs to be updated
with information regarding the latest versions of the unit testing frameworks.

NUnit
2.2

MSTest
2005

xUnit.net
1.x

Comments

AreEqual

AreEqual

Equal

MSTest
and xUnit.net support generic versions of this method

AreNotEqual

AreNotEqual

NotEqual

MSTest
and xUnit.net support generic versions of this method

AreNotSame

AreNotSame

NotSame

AreSame

AreSame

Same

Contains

Contains

Contains

DoAssert

n/a

n/a

n/a

DoesNotContain

DoesNotContain

n/a

n/a

DoesNotThrow

Ensures
that the code does not throw any exceptions

Fail

Fail

n/a

xUnit.net
alternative: Assert.True(false,
"message")

Greater

n/a

n/a

xUnit.net
alternative: Assert.True(x
> y)

Ignore

Inconclusive

n/a

n/a

n/a

InRange

Ensures
that a value is in a given inclusive range (note: NUnit and MSTest have
limited support for InRange on their AreEqual methods)

IsAssignableFrom

n/a

IsAssignableFrom

IsEmpty

n/a

Empty

IsFalse

IsFalse

False

IsInstanceOfType

IsInstanceOfType

IsType

IsNaN

n/a

n/a

xUnit.net
alternative: Assert.True(double.IsNaN(x))

IsNotAssignableFrom

n/a

n/a

xUnit.net
alternative: Assert.False(obj
is Type)

IsNotEmpty

n/a

NotEmpty

IsNotInstanceOfType

IsNotInstanceOfType

IsNotType

IsNotNull

IsNotNull

NotNull

IsNull

IsNull

Null

IsTrue

IsTrue

True

Less

n/a

n/a

xUnit.net
alternative: Assert.True(x
< y)

n/a

n/a

NotInRange

Ensures
that a value is not in a given inclusive range

n/a

n/a

Throws

Ensures
that the code throws an exact exception

Copyright © 2015 Outercurve Foundation. Contributions
welcomed at https://github.com/xunit/xunit.github.io.

测试方式说明:

声明测试用例:

Xunit里面不需要TestClass之类Attribute来标记测试用例类,只需要满足如下条件即可:

  • 测试类必须是public的
  • 测试用例用
    FactAttribute 标记

断言:

Assert类用来验证测试测试函数的输出结果。

Assert.Equal(3, Math.Max(3, 2));

也可以使用一些扩展的断言库,常用的就是xunit.should库,它是以扩展函数的方式进行验证,看起来更加舒服。

PM> Install-Package xunit.should

Math.Max(3, 2).ShouldBe(3);

构建和析构:

Xunit里面并不是通过SetUp和TearDown标记来表明测试用例的构建和析构操作,它每次执行测试用例的时候都会插件测试用例类,执行完成后,如果其实现了IDispose接口,则会调用Dispose函数,更加简洁明了。也就是说:

  • 在测试用例类的构造函数指向数据构建操作,
  • 在Dispose函数中指向数据清理操作

异常测试

Xunit并不是通过Attribute来标记异常捕获的,而是直接使用Assert.Throws断言函数来验证异常。

public class TestClass1
    {
        [ Fact]
         public void testException()
        {
             Assert.Throws<InvalidOperationException>(()
=> operation());
        }
         void operation()
        {
             throw
new InvalidOperationException();
        }
    }

更改测试用例名称:

[ Fact(DisplayName = "Max 函数测试 " )]

跳过测试用例:

[ Fact(Skip = " 重构未完成 " )]

分组:

[ Trait("Group", "Category")]

xUnit随笔的更多相关文章

  1. AI人工智能系列随笔

    初探 AI人工智能系列随笔:syntaxnet 初探(1)

  2. 【置顶】CoreCLR系列随笔

    CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...

  3. C++随笔:.NET CoreCLR之GC探索(4)

    今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...

  4. C++随笔:从Hello World 探秘CoreCLR的内部(1)

    紧接着上次的问题,上次的问题其实很简单,就是HelloWorld.exe运行失败,而本文的目的,就是成功调试HelloWorld这个控制台应用程序. 通过我的寻找,其实是一个名为TryRun的文件出了 ...

  5. 舍弃Nunit拥抱Xunit

    前言 今天与同事在讨论.Net下测试框架的时候,说到NUnit等大多数测试框架的SetUp以及TearDown方法并不是显得那么完美,所以在公司内部的项目中采用了Xunit框架.那么究竟是什么样的原因 ...

  6. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  7. 使用xUnit,EF,Effort和ABP进行单元测试(C#)

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 本篇目录 介绍 创建测试项目 准备测试基类 创建第一个测试 测试异常 在测试中使用仓储 测试异步方法 小结 介绍 在这篇博客中,我 ...

  8. 使用Beautiful Soup编写一个爬虫 系列随笔汇总

    这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...

  9. 利用Python进行数据分析 基础系列随笔汇总

    一共 15 篇随笔,主要是为了记录数据分析过程中的一些小 demo,分享给其他需要的网友,更为了方便以后自己查看,15 篇随笔,每篇内容基本都是以一句说明加一段代码的方式, 保持简单小巧,看起来也清晰 ...

随机推荐

  1. apache2 执行ab测试

    ab命令 1, cd进入目录apache bin目录 2, ·ab -n 5000 -c 200 http://admin.dzj.local/publics/login.html >> ...

  2. LINUX系统---初级相关操作和知识

    LINUX系统的初级,从安装LINUX开始,到处理简单的运维问题.搭建各种服务.解决网路问题.缓解服务器压力,写简单的shell脚本. 我们从基本的入门开始搞事情: 安装LINUX系统 对磁盘的使用 ...

  3. Matlab学习笔记(四)

    二.MATLAB基础知识 (六)字符串 字符串的创建和简单操作 用单引号对括起来的一系列字符的组合,每个字符是一个元素,通常通过两个字节来存储 表2-22    字符串常见操作函数(e_two_37. ...

  4. C++ string 转整数

    使用 sstream 完成转换, #include <iostream> #include <string> #include <sstream> #include ...

  5. 集训第四周(高效算法设计)K题 (滑窗问题)

    UVA 11572 唯一的雪花 题意:给你从1到n的数组,要求求得其中的最长连续不重复子序列,经典的滑窗问题,方法是维护一个窗口,设置左框和右框,然后不断的进行维护和更新 方法一: #include& ...

  6. 模拟Django的admin自定义stark组件

    1.新建Django项目--新建app:app01和stark--在settings中配置app和数据库--在models.py中新建模型表--完成数据库迁移 2.在stark下的apps.py中: ...

  7. jQuery实现上传进度条效果

    效果:(点击上传按钮) See the Pen pjGNJr by moyu (@MoYu1991) on CodePen. html代码:   <!DOCTYPE html> <h ...

  8. HDU 4745 最长回文子序列

    题目大意 两只青蛙朝不同方向条,每次都到达值相同的位置,不能重复到达自己到过的地方,且不能飞跃已到过的地方 我们可以理解为这两只青蛙分别把整个序列遍历了一遍,依次走过所有的点,找到最多相同的点的个数, ...

  9. 食物(bzoj 3280)

    Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数. 他 ...

  10. Tyvj 1221 微子危机——战略

    背景 №.3Summer联盟战前兵力战略转移. 描述 Summer的兵力分布在各个星球上,现在需要把他们全部转移到某个星球上.Summer一共拥有N个星球(1-N),你要把这N个星球上的兵力转到第M个 ...