我剛剛開始使用xUnitClassFixtures中的集合,所以我可能做錯(cuò)了,但我的理解是我可以創(chuàng)建一個(gè),通過將其分配給一個(gè)集合,然后所有具有該屬性的測試類相同的連接名稱將共享固定裝置的相同實(shí)例。ICollectionFixture<MyFixture>CollectionDefinitionAttribtueCollection首先用一個(gè)簡單的例子來證明Fixture每個(gè)測試類只實(shí)例化一次public class SampleFixture:IDisposable{ public static int ConstructorCount { get; set; } public static int DisposeCount { get; set; } public SampleFixture() { ConstructorCount++; } public void Dispose() { DisposeCount++; }}public class SampleTestClass1 : IClassFixture<SampleFixture>{ private readonly ITestOutputHelper outputHelper; private readonly SampleFixture sampleFixture; public SampleTestClass1(ITestOutputHelper outputHelper, SampleFixture sampleFixture) { this.outputHelper = outputHelper; this.sampleFixture = sampleFixture; } [Fact] public void Test1() { this.outputHelper.WriteLine($"Test1 - Constructor Count: {SampleFixture.ConstructorCount} DisposeCount: {SampleFixture.DisposeCount}"); Assert.Equal(1,SampleFixture.ConstructorCount); } [Fact] public void Test2() { this.outputHelper.WriteLine($"Test2 - Constructor Count: {SampleFixture.ConstructorCount} DisposeCount: {SampleFixture.DisposeCount}"); Assert.Equal(1,SampleFixture.ConstructorCount); }}運(yùn)行測試,它們都通過了。1 通過構(gòu)造函數(shù)意味著測試類中的兩個(gè)測試都使用我的裝置的同一實(shí)例。涼豆子。現(xiàn)在讓我們創(chuàng)建一個(gè)CollectionFixture,添加另一個(gè)測試類并使用相同的Collection屬性裝飾它們。[CollectionDefinition("SampleFixture")]public class SampleFixtureCollection : ICollectionFixture<SampleFixture>{ }public class SampleFixture:IDisposable{ public static int ConstructorCount { get; set; } public static int DisposeCount { get; set; } public SampleFixture() { ConstructorCount++; } public void Dispose() { DisposeCount++; }}現(xiàn)在我所有的測試都失敗了。查看第二個(gè)測試類中失敗測試的消息:測試 1 - 構(gòu)造函數(shù)計(jì)數(shù):3 DisposeCount:1看來構(gòu)造函數(shù)被調(diào)用了3 次! 在夾具收集啟動(dòng)期間一次,然后為每個(gè)測試類再一次。這里給出了什么?我的兩個(gè)測試都綁定到同一個(gè)集合,但每個(gè)測試類都獲得自己的測試裝置實(shí)例。我在這里做錯(cuò)了什么還是這是一個(gè)錯(cuò)誤?(我在 GitHub 中沒有發(fā)現(xiàn)任何提及)。將 xUnit v2.4.1 與 .net core 2.1 結(jié)合使用
1 回答

長風(fēng)秋雁
TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
我想到了。
使用 Fixture 集合時(shí),測試類不應(yīng)實(shí)現(xiàn) IClassFixture 接口。
改變
[Collection("SampleFixture")]
public class SampleTestClass1 : IClassFixture<SampleFixture>
{...}
到
[Collection("SampleFixture")]
public class SampleTestClass1 // <-- Removed IClassFixture<SampleFixture>
{...}
解決了問題。
- 1 回答
- 0 關(guān)注
- 154 瀏覽
添加回答
舉報(bào)
0/150
提交
取消