亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

XUnit CollectionFixture 多次實例化

XUnit CollectionFixture 多次實例化

PHP
瀟湘沐 2024-01-20 20:59:22
我剛剛開始使用xUnitClassFixtures中的集合,所以我可能做錯了,但我的理解是我可以創建一個,通過將其分配給一個集合,然后所有具有該屬性的測試類相同的連接名稱將共享固定裝置的相同實例。ICollectionFixture<MyFixture>CollectionDefinitionAttribtueCollection首先用一個簡單的例子來證明Fixture每個測試類只實例化一次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);            }}運行測試,它們都通過了。1 通過構造函數意味著測試類中的兩個測試都使用我的裝置的同一實例。涼豆子。現在讓我們創建一個CollectionFixture,添加另一個測試類并使用相同的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++;    }}現在我所有的測試都失敗了。查看第二個測試類中失敗測試的消息:測試 1 - 構造函數計數:3 DisposeCount:1看來構造函數被調用了3 次! 在夾具收集啟動期間一次,然后為每個測試類再一次。這里給出了什么?我的兩個測試都綁定到同一個集合,但每個測試類都獲得自己的測試裝置實例。我在這里做錯了什么還是這是一個錯誤?(我在 GitHub 中沒有發現任何提及)。將 xUnit v2.4.1 與 .net core 2.1 結合使用
查看完整描述

1 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

我想到了。


使用 Fixture 集合時,測試類不應實現 IClassFixture 接口。


改變


[Collection("SampleFixture")]

public class SampleTestClass1  : IClassFixture<SampleFixture>

{...}


[Collection("SampleFixture")]

public class SampleTestClass1  // <-- Removed IClassFixture<SampleFixture>

{...}

解決了問題。


查看完整回答
反對 回復 2024-01-20
  • 1 回答
  • 0 關注
  • 170 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號