You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xUnitStudy/xUnitStudy.WebApi.Test/UseFixture/UseCollectionFixtureTest.cs

88 lines
3.4 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// Collection级别的Fixture
/// 测试程序集中所有测试类可以共享
/// </summary>
[Collection("Demo Collection")]
public class UseICollectionFixtureTest
{
/* ICollectionFixture使用步骤
*
* 01创建自定义的Fixture类添加构造函数如需做清理,则实现IDisposable接口
* 02创建Collection类, 添加[CollectionDefinition]特性, 并设置一个唯一名称来识别测试集合.
* 03Collection类实现ICollectionFixture<T>接口T 即是“自定义的Fixture类”.
* 04创建具体的测试类添加[Collection]特性,指定要使用的[CollectionDefinition]的唯一名称
* 05如果需要在测试类中使用共享对象只需要把它作为一个构造函数参数。xUnit.Net 会自动发现和运用。
*
*
* 执行流程:
*
* 运行整个测试集
*
* xUnit 发现程序集中所有相关的共享ICollectionFixture创建共享实例并保存与测试集关联
*
* 发现测试类x
*
* xUnit 发现测试类相关共享Fixture创建共享实例并保存与测试类关联
*
* 用例b创建测试类实例 --> 获取共享ICollectionFixture --> 获取共享ClassFixture --> 构造函数 --> 用例1 --> Dispose()方法 --> 结束测试类实例 --> 完成
*
* 用例a创建测试类实例 --> 获取共享ICollectionFixture --> 获取共享ClassFixture --> 构造函数 --> 用例2 --> Dispose()方法 --> 结束测试类实例 --> 完成
*
* 用例x创建测试类实例 --> 获取共享ICollectionFixture --> 获取共享ClassFixture --> 构造函数 --> 用例2 --> Dispose()方法 --> 结束测试类实例 --> 完成
*
* 用例m创建测试类实例 --> 获取共享ICollectionFixture --> 获取共享ClassFixture --> 构造函数 --> 用例2 --> Dispose()方法 --> 结束测试类实例 --> 完成
* ........
* 本测试类中所有用例完成
* 清理共享实例
*
* 其它测试类y m n a ......
*
* ..........
*
* 所有测试类完成
*
* ICollectionFixture共享实例清理
*
* 完成
*
* 特别注意:
* 由于测试用例执行顺序不固定,还可能并行运行
* 所以对共享对象(ICollectionFixture和ClassFixture)的使用,应避免出现竞态条件。
* 否则,很容易因共享类的竞态条件,导致单元测试失败。
* 因此:共享资源,只适合读,不适合写,使用须谨慎。
*/
CollectionFixtureDemo fixtureDemo;
public UseICollectionFixtureTest(CollectionFixtureDemo fixture)
{
fixtureDemo = fixture;
}
[Fact]
public void Test()
{
var persons = fixtureDemo.GetPersonById(1);
Assert.True(persons.Id == 1, "使用全局共享对象");
}
}
}