共享数据完成

develop
bicijinlian 7 years ago
parent a6a5566d3a
commit 81b141418a

@ -46,7 +46,8 @@
<Compile Include="Student.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="xUnitStudy\AssertEqualDemo.cs" />
<Compile Include="xUnitStudy\FixtureDemo.cs" />
<Compile Include="xUnitStudy\CollectionFixtureDemo.cs" />
<Compile Include="xUnitStudy\ClassFixtureDemo.cs" />
<Compile Include="xUnitStudy\IPerson.cs" />
<Compile Include="xUnitStudy\Person.cs" />
<Compile Include="xUnitStudy\Teacher.cs" />

@ -9,11 +9,11 @@ namespace xUnitStudy.Model
/// <summary>
/// 测试方法共享对象实例
/// </summary>
public class FixtureDemo : IDisposable
public class ClassFixtureDemo : IDisposable
{
public int CallTimes { get; private set; }
public List<Person> Persons;
public FixtureDemo()
public ClassFixtureDemo()
{
Persons = new List<Person>()
{

@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace xUnitStudy.Model
{
/// <summary>
/// 测试方法共享对象实例
/// </summary>
public class CollectionFixtureDemo : IDisposable
{
public List<Person> Persons;
public CollectionFixtureDemo()
{
Persons = new List<Person>()
{
new Person(){ Id=1, FirstName="first1",LastName="last1" },
new Person(){ Id=2, FirstName="first2",LastName="last2" },
new Person(){ Id=3, FirstName="first3",LastName="last3" },
};
}
public Person GetPersonById(int personId)
{
var find = Persons.FirstOrDefault(p => p.Id == personId);
return find;
}
public void Dispose()
{
Persons = null;
}
}
}

@ -17,7 +17,7 @@ namespace xUnitStudy.WebApi.Test
/// 设置全局共享
/// </summary>
[CollectionDefinition("Demo Collection")]
public class CollectionFixtureSetup:ICollectionFixture<FixtureDemo>
public class CollectionFixtureSetup:ICollectionFixture<CollectionFixtureDemo>
{
//这个类没有代码,而不需要创建。
//其目的是简单地设置测试集共享数据

@ -14,16 +14,47 @@ using xUnitStudy.Model;
namespace xUnitStudy.WebApi.Test
{
/// <summary>
/// 测试类级别的共享(类内所有测试用例,共享一个实例)
/// 注意:因为不能保证各个单元测试的执行先后顺序或者特别是并行单元测试时,
/// 很容因共享类的并发操作导致单元测试失败。共享须谨慎。
/// 适合读,不适合写
/// 测试类级别的共享(类内所有测试用例,共享一个类的实例)
/// </summary>
public class UseIClassFixtureTest:IClassFixture<FixtureDemo>, IDisposable
public class UseIClassFixtureTest:IClassFixture<ClassFixtureDemo>, IDisposable
{
FixtureDemo fixtureDemo;
public UseIClassFixtureTest(FixtureDemo fixture)
/* IClassFixture使:
*
* 01Fixture,IDisposable
* 02 IClassFixture<T>T Fixture
* 03Fixture使Context.
* xUnit.Net
*
*
*
*
*
* xUnit Fixture
*
* b --> Fixture --> --> 1 --> Dispose() --> -->
*
* a --> Fixture --> --> 2 --> Dispose() --> -->
*
* x --> Fixture --> --> 2 --> Dispose() --> -->
*
* m --> Fixture--> --> 2 --> Dispose() --> -->
* ........
*
*
*
*
*
*
* 使
*
* 使
*/
ClassFixtureDemo fixtureDemo;
public UseIClassFixtureTest(ClassFixtureDemo fixture)
{
this.fixtureDemo = fixture;
}

@ -14,14 +14,64 @@ using xUnitStudy.Model;
namespace xUnitStudy.WebApi.Test
{
/// <summary>
/// 测试集级别的共享
/// Collection级别的Fixture
/// 测试程序集中所有测试类可以共享
/// </summary>
[Collection("Demo Collection")]
public class UseICollectionFixtureTest
{
FixtureDemo fixtureDemo;
/* ICollectionFixture使
*
* 01Fixture,IDisposable
* 02Collection, [CollectionDefinition], .
* 03CollectionICollectionFixture<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() --> -->
public UseICollectionFixtureTest(FixtureDemo fixture)
* ........
*
*
*
* y m n a ......
*
* ..........
*
*
*
* ICollectionFixture
*
*
*
*
*
* (ICollectionFixtureClassFixture)使
*
* 使
*/
CollectionFixtureDemo fixtureDemo;
public UseICollectionFixtureTest(CollectionFixtureDemo fixture)
{
fixtureDemo = fixture;
}
@ -29,11 +79,9 @@ namespace xUnitStudy.WebApi.Test
[Fact]
public void Test()
{
var persons = fixtureDemo.Persons;
//do something with persons
var persons = fixtureDemo.GetPersonById(1);
Assert.True(true, "使用全局共享对象");
Assert.True(persons.Id == 1, "使用全局共享对象");
}
}
}

@ -0,0 +1,45 @@
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.UseFixture
{
/// <summary>
/// 同时使用多种共享
/// </summary>
[Collection("Demo Collection")]
public class UseFullFixtures : IDisposable, IClassFixture<ClassFixtureDemo>
{
CollectionFixtureDemo collectionFixture;
ClassFixtureDemo classFixture;
public UseFullFixtures(CollectionFixtureDemo collectionDemo, ClassFixtureDemo fixtureDemo)
{
classFixture = fixtureDemo;
collectionFixture = collectionDemo;
}
[Fact]
public void Test()
{
Assert.NotNull(classFixture);
var person = collectionFixture.GetPersonById(2);
Assert.Equal(2, person.Id);
}
public void Dispose()
{
//每个测试用例的清理
}
}
}

@ -90,6 +90,7 @@
<Compile Include="UseFixture\UseFixtureTest.cs" />
<Compile Include="UseFixture\UseClassFixtureTest.cs" />
<Compile Include="UseFixture\UseCollectionFixtureTest.cs" />
<Compile Include="UseFixture\UseFullFixtures.cs" />
<Compile Include="UseOutputTest.cs" />
<Compile Include="UseXUnitTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

Loading…
Cancel
Save