循环遍历 memberdata 的 xunit 单元测试方法参数
Loop through xunit unit test method params for memberdata
我有这个方法可以使用 xUnit 进行测试
public class Cal
{
public int Output { get; set; }
public void Add(int num1, int num2) => Output = num1 + num2;
}
在我的单元测试 xUnit 中,我有
public class CalTest
{
private readonly Cal _cal;
public CalTest()
{
_cal = new Cal();
}
[Theory, MemberData(nameof(Data))] // Arrange
public void CanAdd2Numbers(int expected, params int[] valuesToAdd)
{
// Act
foreach (var value in valuesToAdd)
{
//_cal.Add(value[0], value[1]);
}
// Assert
Assert.Equal(expected, _cal.Output);
}
public static IEnumerable<object[]> Data()
{
return new List<object[]>
{
new object[] { 1, 2, 3 },
new object[] { -1, 1, 0 }
};
}
}
如何将数组的第一个元素作为 num1
传递,第二个元素作为 num2
传递,第三个元素作为预期结果传递?而且我不想使用 InlineData
.
您可以像这样将 MemberData 数组元素分配给测试方法参数:
public class Test
{
[Theory]
[MemberData(nameof(Data))]
public void CanAdd2Numbers(int num1, int num2, int expected)
{
var actual = num1 + num2;
Assert.Equal(expected, actual);
}
public static IEnumerable<object[]> Data()
{
return new List<object[]>
{
new object[] { 1, 2, 3 },
new object[] { -1, 1, 0 }
};
}
}
您也可能喜欢此博客 post,了解如何将 TestData 转换为强类型:https://andrewlock.net/creating-strongly-typed-xunit-theory-test-data-with-theorydata/
您可以使用元组:
public static IEnumerable<(int a, int b,int c)> Data()
{
return new List<(int a, int b,int c)>
{
(a:1,b:2,c:3),
(a:1,b:-1,c:0)
};
}
然后你会像这样使用它
_cal.Add(value.a, value.b);
Assert.Equal(value.c, _cal.Output);
我有这个方法可以使用 xUnit 进行测试
public class Cal
{
public int Output { get; set; }
public void Add(int num1, int num2) => Output = num1 + num2;
}
在我的单元测试 xUnit 中,我有
public class CalTest
{
private readonly Cal _cal;
public CalTest()
{
_cal = new Cal();
}
[Theory, MemberData(nameof(Data))] // Arrange
public void CanAdd2Numbers(int expected, params int[] valuesToAdd)
{
// Act
foreach (var value in valuesToAdd)
{
//_cal.Add(value[0], value[1]);
}
// Assert
Assert.Equal(expected, _cal.Output);
}
public static IEnumerable<object[]> Data()
{
return new List<object[]>
{
new object[] { 1, 2, 3 },
new object[] { -1, 1, 0 }
};
}
}
如何将数组的第一个元素作为 num1
传递,第二个元素作为 num2
传递,第三个元素作为预期结果传递?而且我不想使用 InlineData
.
您可以像这样将 MemberData 数组元素分配给测试方法参数:
public class Test
{
[Theory]
[MemberData(nameof(Data))]
public void CanAdd2Numbers(int num1, int num2, int expected)
{
var actual = num1 + num2;
Assert.Equal(expected, actual);
}
public static IEnumerable<object[]> Data()
{
return new List<object[]>
{
new object[] { 1, 2, 3 },
new object[] { -1, 1, 0 }
};
}
}
您也可能喜欢此博客 post,了解如何将 TestData 转换为强类型:https://andrewlock.net/creating-strongly-typed-xunit-theory-test-data-with-theorydata/
您可以使用元组:
public static IEnumerable<(int a, int b,int c)> Data()
{
return new List<(int a, int b,int c)>
{
(a:1,b:2,c:3),
(a:1,b:-1,c:0)
};
}
然后你会像这样使用它
_cal.Add(value.a, value.b);
Assert.Equal(value.c, _cal.Output);