1、创建如下的项目结构
public class TestName { public bool ValidateName(string Name) { if (Name == "yin") { return true; } else return false; } }
public class UnitTest1 { [Fact] public void Test1() { TestName name = new TestName(); Assert.True(name.ValidateName("yin")); } }
运行方法,打开测试资源管理器,让后点击全部运行:
Assert.True
断言累,判断返回结果是否真,真表示测试通过,false表示测试不通过
如果以前使用过NUnit或者VS自带的MSTest测试工具,下面的对比表格会让你很容易上手xUnit.net:
NUnit 2.2 |
MSTest |
xUnit.net |
备注 |
[Test] |
[TestMethod] |
[Fact] |
标记为测试方法 |
[TestFixture] |
[TestClass] |
n/a |
包含有测试方法的类,在xUnit.net中无需标记,它会查找程序集中所有的public的测试方法 |
[ExpectedException] |
[ExpectedException] |
Assert.Throws/ Record.Exception |
期望抛出异常 |
[SetUp] |
[TestInitialize] |
Constructor(即构造函数) |
在每个测试方法执行之前用于初始化的方法 |
[TearDown] |
[TestCleanup] |
IDisposable.Dispose |
在每个测试方法执行之后用于结束的方法 |
[TestFixtureSetUp] |
[ClassInitialize] |
IUseFixture<T> |
在所有测试方法执行之前用于初始化的方法 |
[TestFixtureTearDown] |
[ClassCleanup] |
IUseFixture<T> |
在所有测试方法执行之后用于结束的方法 |
[Ignore] |
[Ignore] |
[Fact(Skip="reason")] |
临时忽略被标记的方法 |
n/a |
[Timeout] |
[Fact(Timeout=n)] |
用于指定被测试方法的最大执行时间(单位毫秒),如果超过指定时间则会被标记为测试失败 |
[Property] |
[TestProperty] |
[Trait] |
Set arbitrary metadata on a test |
n/a |
[DataSource] |
[Theory], [XxxData] |
xUnit.Net的断言(Assertions)
下面的表格也是一个关于NUnit、MSTest及xUnit.Net断言的对比。
NUnit 2.2 |
MSTest |
xUnit.net |
备注 |
AreEqual |
AreEqual |
Equal |
相等比较 |
AreNotEqual |
AreNotEqual |
NotEqual |
不相等比较 |
AreNotSame |
AreNotSame |
NotSame |
不相同比较 |
AreSame |
AreSame |
Same |
相同比较 |
Contains |
Contains (on CollectionAssert) |
Contains |
|
DoAssert |
n/a |
n/a |
|
n/a |
DoesNotContain (on CollectionAssert) |
DoesNotContain |
|
n/a |
n/a |
DoesNotThrow |
|
Fail |
Fail |
n/a |
可用Assert.True(false, "message")替代 |
Greater |
n/a |
n/a |
可用Assert.True(x > y)替代 |
Ignore |
Inconclusive |
n/a |
|
n/a |
n/a |
InRange |
|
IsAssignableFrom |
n/a |
IsAssignableFrom |
|
IsEmpty |
n/a |
Empty |
|
IsFalse |
IsFalse |
False |
|
IsInstanceOfType |
IsInstanceOfType |
IsType |
|
IsNaN |
n/a |
n/a |
可用Assert.True(double.IsNaN(x))替代 |
IsNotAssignableFrom |
n/a |
n/a |
可用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 |
可用Assert.True(x < y)替代 |
n/a |
n/a |
NotInRange |
确保数据在某个范围内 |
n/a |
n/a |
Throws |
确保会抛出异常 |
xUnit.Net的项目文件结构
因为在可视化方面xUnit.Net不如NUnit,所以这里有必要介绍一下它的项目文件.xunit的组成元素。.xunit实际上也是一个xml文件,它的根节点是<xunit>,<xunit>有<assemblies>子节点,<assemblies>下可以有多个<assembly>节点。<assembly>节点包含以下属性:
filename:这是必须属性,用于指定包含在项目中的绝对或者相对路径的文件。
config-filename:这个是非必须属性,用于指定测试时所使用的config文件,默认是none,表示不适用任何配置文件。
shadow-copy:运行测试时是否对dll进行shadow-copy,默认是true,这个咱还不清楚true/false对程序的影响。
下面就是一个例子,在例子中执行指明了测试中使用的config文件: