[英]xUnit : Mutiple Assertions or Soft Assert
如何在 xUnit 中找到多個斷言或軟斷言? 我發現 Nunit 有以下能力,試圖在 xUnit 中找到類似的選項。
Assert.Multiple(() =>
{
Assert.AreEqual(expectedResult1, actualResult1, "Mismatch in Score1!");
Assert.AreEqual(expectedResult2, actualResult2, "Mismatch in Score2!");
Assert.AreEqual(expectedResult3, actualResult3, "Mismatch in Score3!");
});
它不存在。
我們可以做很多事情,但出於很多原因,我們選擇不做。 這個原因包括: (a) 實施和維護成本; (b) 相互競爭的優先事項; (c) 對特征的哲學反對。
在這種情況下,您與 (c) 發生沖突。 我們不認為一個單元測試框架應該運行多個失敗的斷言。
xUnit 通常比 NUnit 更固執己見,出於意識形態原因,不會包含 NUnit 支持的內容。
將您的測試用例放入IEnumerable<T>
並使用Assert.All<T>()
:
var expectations = new List<Tuple<object, object>>()
{
new(expectedResult1, actualResult1),
new(expectedResult2, actualResult2),
new(expectedResult3, actualResult3),
};
Assert.All(expectations, pair => Assert.Equal(pair.Item1, pair.Item2));
如果您喜歡 BDD / fluent 風格的斷言,您可以考慮使用以下庫之一,它們都與 xUnit 完全兼容:
using (new AssertionScope())
{
actualResult1.Should().Be(expectedResult1, "Mismatch in Score1!");
actualResult2.Should().Be(expectedResult2, "Mismatch in Score2!");
}
var mrBurns = new Person { Name = null };
mrBurns.ShouldSatisfyAllConditions(
() => mrBurns.Name.ShouldNotBeNullOrEmpty(),
() => mrBurns.Name.ShouldBe("Mr.Burns"));
實際上它現在存在https://github.com/xunit/assert.xunit/blob/main/MultipleAsserts.cs ,在問題1920得到解決之后。 它首先在 assert.xunit-tag2.4.2-pre.19和 NuGet-package assert.xunit 2.4.2-pre.12 中發布。 另請參閱xUnit.net 2.4.2 預發布版(內部版本 12)的發行說明
問題的例子可以寫成
Assert.Multiple(
() => Assert.AreEqual(expectedResult1, actualResult1, "Mismatch in Score1!"),
() => Assert.AreEqual(expectedResult2, actualResult2, "Mismatch in Score2!"),
() => Assert.AreEqual(expectedResult3, actualResult3, "Mismatch in Score3!"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.