XUnit测试错误:无法将system.collections.generic.list <“ filename.class”>转换为字符串

时间:2019-09-06 02:41:39

标签: c# methods xunit

当我尝试构建xunit测试时,我的期望还可以,但是我给我的实际变量错误的东西。我正在学习xunit,此刻让我发疯。

我对以下方法的测试:

    [Fact]
        public void AddToKartMethod()
        {
            var expected = "item";
            var actual = AddToKart.PutItemInKart("item", 3, 4.5);
            Assert.Equal(expected, actual);
        }

我的方法:

  public static List<KartItem> PutItemInKart(string input, int inputNumber, double inputPrice)
        {
            List<KartItem> kart = new List<KartItem>();
            kart.Add(new KartItem() {
                Item = input,
                Pound = inputNumber,
                Cost = inputPrice
            });;
            return kart;
        }

我的KartItem:

 public class KartItem
    {
        public string Item { get; set; }
        public int Pound { get; set; }
        public double Cost { get; set; }

        public KartItem(string item, int pound, double cost)
        {
            item = Item;
            pound = Pound;
            cost = Cost;
        }

        public KartItem()
        {

        }
    }

在我的测试中,实际的下划线为红色,错误消息显示为“参数2:无法从Systems.Collections.Generic.List转换为字符串。我只想测试PutItemInKart中的字符串项。

1 个答案:

答案 0 :(得分:0)

您正在尝试比较两种不同的类型。从KartItem对象中提取期望值,以与期望值进行比较

[Fact]
public void AddToKartMethod() {
    //Arrange
    string expected = "item";

    //Act
    List<KartItem> items = AddToKart.PutItemInKart(expected, 3, 4.5);
    string actual = items[0].Item;

    //Assert
    Assert.Equal(expected, actual);
}

请注意用于变量的显式类型。在这种情况下,使用var会引起混淆,因为用户/编码器不知道类型。

但是请注意,应该检查该功能的逻辑。由于列表是在函数中创建并填充的,因此它只会始终返回一个项目的集合。