From a6a5566d3a58886cf859637a4ccd153eb6faa8fd Mon Sep 17 00:00:00 2001 From: bicijinlian Date: Sat, 4 Aug 2018 10:01:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B1=E4=BA=AB=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...aseOrdererTest.cs => TestCaseOrderTest.cs} | 4 +- ...UseXUnitAssertTest.cs => UseAssertTest.cs} | 4 +- .../UseFixture/CollectionFixtureSetup.cs | 27 ++++++++ .../UseClassFixtureTest.cs} | 6 +- .../UseFixture/UseCollectionFixtureTest.cs | 39 +++++++++++ .../UseFixture/UseFixtureTest.cs | 67 +++++++++++++++++++ ...UseXUnitOutputTest.cs => UseOutputTest.cs} | 4 +- .../UseXUnitICollectionFixtureTest.cs | 12 ---- .../xUnitStudy.WebApi.Test.csproj | 12 ++-- 9 files changed, 149 insertions(+), 26 deletions(-) rename xUnitStudy.WebApi.Test/{TestCaseOrdererTest.cs => TestCaseOrderTest.cs} (87%) rename xUnitStudy.WebApi.Test/{UseXUnitAssertTest.cs => UseAssertTest.cs} (99%) create mode 100644 xUnitStudy.WebApi.Test/UseFixture/CollectionFixtureSetup.cs rename xUnitStudy.WebApi.Test/{UseXUnitIClassFixtureTest.cs => UseFixture/UseClassFixtureTest.cs} (92%) create mode 100644 xUnitStudy.WebApi.Test/UseFixture/UseCollectionFixtureTest.cs create mode 100644 xUnitStudy.WebApi.Test/UseFixture/UseFixtureTest.cs rename xUnitStudy.WebApi.Test/{UseXUnitOutputTest.cs => UseOutputTest.cs} (83%) delete mode 100644 xUnitStudy.WebApi.Test/UseXUnitICollectionFixtureTest.cs diff --git a/xUnitStudy.WebApi.Test/TestCaseOrdererTest.cs b/xUnitStudy.WebApi.Test/TestCaseOrderTest.cs similarity index 87% rename from xUnitStudy.WebApi.Test/TestCaseOrdererTest.cs rename to xUnitStudy.WebApi.Test/TestCaseOrderTest.cs index d96b072..0fa78dc 100644 --- a/xUnitStudy.WebApi.Test/TestCaseOrdererTest.cs +++ b/xUnitStudy.WebApi.Test/TestCaseOrderTest.cs @@ -14,11 +14,11 @@ namespace xUnitStudy.WebApi.Test /// /// 输出窗口的测试选项,显示测试相关信息 /// - public class TestCaseOrdererTest: ITestCaseOrderer + public class TestCaseOrderTest: ITestCaseOrderer { private readonly IMessageSink diagnosticMessageSink; - public TestCaseOrdererTest(IMessageSink diagnosticMessageSink) + public TestCaseOrderTest(IMessageSink diagnosticMessageSink) { this.diagnosticMessageSink = diagnosticMessageSink; } diff --git a/xUnitStudy.WebApi.Test/UseXUnitAssertTest.cs b/xUnitStudy.WebApi.Test/UseAssertTest.cs similarity index 99% rename from xUnitStudy.WebApi.Test/UseXUnitAssertTest.cs rename to xUnitStudy.WebApi.Test/UseAssertTest.cs index 31870d9..4bf601f 100644 --- a/xUnitStudy.WebApi.Test/UseXUnitAssertTest.cs +++ b/xUnitStudy.WebApi.Test/UseAssertTest.cs @@ -14,10 +14,10 @@ namespace xUnitStudy.WebApi.Test /// https://xunit.github.io/docs/comparisons /// [Trait("测试断言分组", "默认组")] - public class UseXUnitAssertTest : IDisposable + public class UseAssertTest : IDisposable { #region 准备 - public UseXUnitAssertTest() + public UseAssertTest() { } diff --git a/xUnitStudy.WebApi.Test/UseFixture/CollectionFixtureSetup.cs b/xUnitStudy.WebApi.Test/UseFixture/CollectionFixtureSetup.cs new file mode 100644 index 0000000..2492c1f --- /dev/null +++ b/xUnitStudy.WebApi.Test/UseFixture/CollectionFixtureSetup.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Xunit; +using Xunit.Abstractions; +using Xunit.Extensions; +using Xunit.Sdk; + +using xUnitStudy.Model; + +namespace xUnitStudy.WebApi.Test +{ + /// + /// 设置全局共享 + /// + [CollectionDefinition("Demo Collection")] + public class CollectionFixtureSetup:ICollectionFixture + { + //这个类没有代码,而不需要创建。 + //其目的是简单地设置测试集共享数据 + //只要设置[CollectionDefinition("Demo Collection")]特性 + //并实现IClassFixture接口 + } +} diff --git a/xUnitStudy.WebApi.Test/UseXUnitIClassFixtureTest.cs b/xUnitStudy.WebApi.Test/UseFixture/UseClassFixtureTest.cs similarity index 92% rename from xUnitStudy.WebApi.Test/UseXUnitIClassFixtureTest.cs rename to xUnitStudy.WebApi.Test/UseFixture/UseClassFixtureTest.cs index c7deab7..506aff7 100644 --- a/xUnitStudy.WebApi.Test/UseXUnitIClassFixtureTest.cs +++ b/xUnitStudy.WebApi.Test/UseFixture/UseClassFixtureTest.cs @@ -14,16 +14,16 @@ using xUnitStudy.Model; namespace xUnitStudy.WebApi.Test { /// - /// 类内所有测试,共享一个实例 + /// 测试类级别的共享(类内所有测试用例,共享一个实例) /// 注意:因为不能保证各个单元测试的执行先后顺序或者特别是并行单元测试时, /// 很容因共享类的并发操作导致单元测试失败。共享须谨慎。 /// 适合读,不适合写 /// - public class UseXUnitIClassFixtureTest:IClassFixture, IDisposable + public class UseIClassFixtureTest:IClassFixture, IDisposable { FixtureDemo fixtureDemo; - public UseXUnitIClassFixtureTest(FixtureDemo fixture) + public UseIClassFixtureTest(FixtureDemo fixture) { this.fixtureDemo = fixture; } diff --git a/xUnitStudy.WebApi.Test/UseFixture/UseCollectionFixtureTest.cs b/xUnitStudy.WebApi.Test/UseFixture/UseCollectionFixtureTest.cs new file mode 100644 index 0000000..5eb3c3f --- /dev/null +++ b/xUnitStudy.WebApi.Test/UseFixture/UseCollectionFixtureTest.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Xunit; +using Xunit.Abstractions; +using Xunit.Extensions; +using Xunit.Sdk; + +using xUnitStudy.Model; + +namespace xUnitStudy.WebApi.Test +{ + /// + /// 测试集级别的共享 + /// + [Collection("Demo Collection")] + public class UseICollectionFixtureTest + { + FixtureDemo fixtureDemo; + + public UseICollectionFixtureTest(FixtureDemo fixture) + { + fixtureDemo = fixture; + } + + [Fact] + public void Test() + { + var persons = fixtureDemo.Persons; + + //do something with persons + + Assert.True(true, "使用全局共享对象"); + } + } +} diff --git a/xUnitStudy.WebApi.Test/UseFixture/UseFixtureTest.cs b/xUnitStudy.WebApi.Test/UseFixture/UseFixtureTest.cs new file mode 100644 index 0000000..a87fb35 --- /dev/null +++ b/xUnitStudy.WebApi.Test/UseFixture/UseFixtureTest.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Xunit; +using Xunit.Abstractions; +using Xunit.Extensions; +using Xunit.Sdk; + +using xUnitStudy.Model; + +namespace xUnitStudy.WebApi.Test +{ + /// + /// 测试用例级别的共享 + /// + public class UseFixtureTest:IDisposable + { + /* 学习 + 测试时,无论是针对一些比较耗费资源的对象亦或是为了支持Test case预设数据的能力,我们都需要有一些初始化或是清理相关的动作。 + 在每个测试用例执行前和执行后,可能需要执行相同的准备和清理工作。 + 本例方法1:放在构造函数和IDisposable接口的实现方法Dispose()中 + 执行流程: + 用例b:创建测试类实例 --> 构造函数 --> 用例1 --> Dispose()方法 --> 结束测试类实例 --> 完成 + + 用例a:创建测试类实例 --> 构造函数 --> 用例2 --> Dispose()方法 --> 结束测试类实例 --> 完成 + + 用例x:创建测试类实例 --> 构造函数 --> 用例2 --> Dispose()方法 --> 结束测试类实例 --> 完成 + + 用例m:创建测试类实例 --> 构造函数 --> 用例2 --> Dispose()方法 --> 结束测试类实例 --> 完成 + + ........ + + 所有用例完成 + + 注意:用例执行的先后顺序由xUnit框架指定,且先后顺序不固定。尤其是并行执行时,执行顺序和返回顺序更不确定。 + 所以,各单元测试是完全独立的,相互之间不能存在任何依赖,特别是执行顺序、执行结果、共享数据。 + */ + + object sharedData; + public UseFixtureTest() + { + //测试用例执行前做准备 + sharedData = "sharedate"; + } + + [Fact] + public void Case2_Test() + { + Assert.Equal("sharedate", sharedData.ToString()); + } + + [Fact] + public void Case1_Test() + { + Assert.Equal("sharedate", sharedData.ToString()); + } + + public void Dispose() + { + //测试用例执行后做清理 + sharedData = null; + } + } +} diff --git a/xUnitStudy.WebApi.Test/UseXUnitOutputTest.cs b/xUnitStudy.WebApi.Test/UseOutputTest.cs similarity index 83% rename from xUnitStudy.WebApi.Test/UseXUnitOutputTest.cs rename to xUnitStudy.WebApi.Test/UseOutputTest.cs index 116d5dd..430c11e 100644 --- a/xUnitStudy.WebApi.Test/UseXUnitOutputTest.cs +++ b/xUnitStudy.WebApi.Test/UseOutputTest.cs @@ -8,10 +8,10 @@ using Xunit.Abstractions; namespace xUnitStudy.WebApi.Test { - public class UseXUnitOutputTest + public class UseOutputTest { private readonly ITestOutputHelper output; - public UseXUnitOutputTest(ITestOutputHelper output) + public UseOutputTest(ITestOutputHelper output) { this.output = output; } diff --git a/xUnitStudy.WebApi.Test/UseXUnitICollectionFixtureTest.cs b/xUnitStudy.WebApi.Test/UseXUnitICollectionFixtureTest.cs deleted file mode 100644 index 01bfaac..0000000 --- a/xUnitStudy.WebApi.Test/UseXUnitICollectionFixtureTest.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace xUnitStudy.WebApi.Test -{ - public class UseXUnitICollectionFixtureTest - { - } -} diff --git a/xUnitStudy.WebApi.Test/xUnitStudy.WebApi.Test.csproj b/xUnitStudy.WebApi.Test/xUnitStudy.WebApi.Test.csproj index 4b3f0dc..78d88ba 100644 --- a/xUnitStudy.WebApi.Test/xUnitStudy.WebApi.Test.csproj +++ b/xUnitStudy.WebApi.Test/xUnitStudy.WebApi.Test.csproj @@ -82,13 +82,15 @@ + + - - - - - + + + + +