Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# memberdata的循环xunit单元测试方法参数_C#_Xunit - Fatal编程技术网

C# memberdata的循环xunit单元测试方法参数

C# memberdata的循环xunit单元测试方法参数,c#,xunit,C#,Xunit,我使用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; publ

我使用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 }
            };
        }
 }
公共类CalTest
{
私有只读卡_-Cal;
公共CalTest()
{
_cal=新cal();
}
[Theory,MemberData(nameof(Data))]//排列
public void CANADD2编号(应为int,参数int[]value stoadd)
{
//表演
foreach(valuesToAdd中的var值)
{
//_计算加(值[0],值[1]);
}
//断言
Assert.Equal(预期,_校准输出);
}
公共静态IEnumerable数据()
{
返回新列表
{
新对象[]{1,2,3},
新对象[]{-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 }
        };
    }
}
公共类测试
{
[理论]
[成员数据(名称(数据))]
公共无效CANADD2编号(整数num1、整数num2、整数预期)
{
var实际值=num1+num2;
断言。相等(预期、实际);
}
公共静态IEnumerable数据()
{
返回新列表
{
新对象[]{1,2,3},
新对象[]{-1,1,0}
};
}
}
您可能还想通过这篇博文了解如何将测试数据转换为强类型:

您可以使用tuple:

   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)
        };
    }

如果我明白你的意思。。。你不能静态地,但是你可以创建一个专门的测试来实现这一点,或多或少地说明我的
[理论,MemberData(nameof(Data3))]
会是什么?
        _cal.Add(value.a, value.b);
        Assert.Equal(value.c, _cal.Output);