标题是很清楚的。如何将(string, string)传递给内联数据?
using System.Security.Cryptography;
using Xunit;
namespace Summer_Outfit.UnitTesting;
public class OutfitTests
{
[Fact]
public void Execute_DegreesTimeFromDay_ReturnsOutfitShoes()
{
// Arrange
const int degrees = 20;
const string timeFromDay = "Morning";
var outfit = new Outfit();
var expected = ("Shirt", "Moccasins");
// Act
var actual = outfit.Execute(degrees, timeFromDay);
// Assert
Assert.Equal(expected, actual);
}
[Theory]
[InlineData(20, "Morning", ("Shirt", "Moccasins"))] // compile-time error here
[InlineData(20, "Afternoon", ("Shirt", "Moccasins"))] // compile-time error here
[InlineData(20, "Evening", ("Shirt", "Moccasins"))] // compile-time error here
public void Execute_MultipleDegreesTimeFromDay_ReturnsOutfitShoes(int degrees, string timeFromDay, (string, string)expected)
{
// Arrange
var outfit = new Outfit();
// Act
var actual = outfit.Execute(degrees, timeFromDay);
// Assert
Assert.Equal(expected, actual);
}
}发布于 2022-09-29 15:13:24
根据@JoshuaRobinson在评论中给出的语言规范部分:
21.2.4属性参数类型属性类的位置参数和命名参数类型仅限于属性参数类型,即:
下列类型之一:bool, byte, char, double, float, int, long, sbyte, short, string, uint, ulong, ushort。
object型。
System.Type型。
Enum类型。
上述类型的一维数组。
没有这些类型之一的构造函数参数或公共字段,不应用作属性规范中的位置参数或命名参数。
因此,如果不希望在方法中将它们分开,则可以使用数组作为不同的解决方法:
[InlineData(20, "Morning", new string[] {"Shirt", "Moccasins"})]
public void Execute_MultipleDegreesTimeFromDay_ReturnsOutfitShoes(int degrees, string timeFromDay, string[] expected)但是,为了进行比较,您仍然需要用它做一个元组:
Assert.Equal((expected[0], expected[1]), actual);如果希望将其保持为元组,则可以使用MemberData或ClassData数据源。有关示例,请参见https://hamidmosalla.com/2017/02/25/xunit-theory-working-with-inlinedata-memberdata-classdata/。
https://stackoverflow.com/questions/73896651
复制相似问题