在xUnit.net框架中是否有类似于NUnit的以下功能?
[Test, TestCaseSource("CurrencySamples")]
public void Format_Currency(decimal value, string expected){}
static object[][] CurrencySamples = new object[][]
{
new object[]{ 0m, "0,00"},
new object[]{ 0.0004m, "0,00"},
new object[]{ 5m, "5,00"},
new object[]{ 5.1m, "5,10"},
new object[]{ 5.12m, "5,12"},
new object[]{ 5.1234m, "5,12"},
new object[]{ 5.1250m, "5,13"}, // round
new object[]{ 5.1299m, "5,13"}, // round
}
Run Code Online (Sandbox Code Playgroud)
这将在NUnit GUI中生成8个单独的测试
[TestCase((string)null, Result = "1")]
[TestCase("", Result = "1")]
[TestCase(" ", Result = "1")]
[TestCase("1", Result = "2")]
[TestCase(" 1 ", Result = "2")]
public string …Run Code Online (Sandbox Code Playgroud) 我想要将列表,数组和/或seq用作xUnit的InlineData的参数.
在C#中,我可以这样做:
using Xunit; //2.1.0
namespace CsTests
{
public class Tests
{
[Theory]
[InlineData(new[] {1, 2})]
public void GivenCollectionItMustPassItToTest(int[] coll)
{
Assert.Equal(coll, coll);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在F#我有这个:
namespace XunitTests
module Tests =
open Xunit //2.1.0
[<Theory>]
[<InlineData(8)>]
[<InlineData(42)>]
let ``given a value it must give it to the test`` (value : int) =
Assert.Equal(value, value)
[<Theory>]
[<InlineData([1; 2])>]
let ``given a list it should be able to pass it to the test``
(coll : int list) =
Assert.Equal<int list>(coll, coll) …Run Code Online (Sandbox Code Playgroud) 最近,我们一直在一个新项目中尝试单元测试,现在我们想使用来将一个对象传递给我们的测试方法[InlineData],因此我们可以对多个不同的数据输入多次使用同一测试方法。
[ClassData]并且[MemberData]据我了解,也可以提供,但似乎没有提供解决方案。
基本上,有一种方法可以通过XUnit传递对象,如下所示:
[Theory]
[InlineData(new Object { Attribute = 1 })]
public void Test(Object obj)
{
// Assert
Xunit.Assert.NotNull(obj.Attribute);
}
Run Code Online (Sandbox Code Playgroud)
还是这不是正确的约定或用法?
传递int和string的使用效果很好[InlineData]
如何提供 List 作为数据理论的数据源,我在 InlineData 中找不到任何支持此内容的内容:
[InlineData(null, new[] { 42, 2112 }, null)] // This doesn't work, I need something that works with List<int>
[Trait("Category", "API")]
[Trait("Category", "Partner")]
[Trait("Category", "Smoke")]
public void VerifyGetCarListAsync(int? colorID, List<int> carIDs, int? sellerID){//}
Run Code Online (Sandbox Code Playgroud) 我试图编写一个测试,检查派生类中的方法是否未被错误覆盖.所以我尝试了以下内容.但无论我尝试什么,它似乎都不允许我"注入"我的对象.
[Theory]
[xxxData(new BaseClass())]
[xxxData(new DerivedClass())]
public void Test_Stuff(BaseClass obj)
{
// ...
}
Run Code Online (Sandbox Code Playgroud) 我有一些自定义 C# 对象,我想将它们作为InlineData参数传递到 xUnit 的Theory.
我尝试了这个问题的答案,但没有成功,因为我的对象不是字符串,因此不能创建为编译时常量(属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式)。
这是我尝试过的,
private static readonly Card sevenOfHearts = Card.SevenOfHearts;
private static readonly Card sevenOfSpades = Card.SevenOfSpades;
private static readonly Card sevenOfDiamonds = Card.SevenOfDiamonds;
private static readonly Card sevenOfClubs = Card.SevenOfClubs;
[Theory]
[InlineData(sevenOfHearts)]
[InlineData(sevenOfSpades)]
[InlineData(sevenOfDiamonds)]
[InlineData(sevenOfClubs)]
void Test(
Card card)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
但我收到抱怨说这些对象不是编译时常量。
有什么替代方案吗?