首页 > 解决方案 > 将 IQueryable 对象与 xUnit 理论结合使用

问题描述

我有一个从 SqlServer 数据库运行计算的程序。我想测试这些计算是否正确完成。目前,我能做到这一点的唯一方法是使用带有理论的答案整数,并验证该函数是否为相应的数据库行提供答案整数。

这是次优的,因为每个测试我都有两个整数,答案和我想要测试的行的索引。

[Theory]
[InlineData(db.movieTable.Take(1).Select(p => p))]
public void Test1(IQueryable<movieTable> value)
{
    var result = db.movieTable.Take(1).Select(p => p).ToList().ElementAt(0).Price;
    Assert.True(value.ToList().ElementAt(0).Price == 10);
}

有没有办法做到这一点。如果我运行此代码,我会收到以下错误:UnitTest1.cs(19,21): error CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type [C:\Users\co-op7\Documents\GeorgeCode\MovieSite\MovieManage.Tests\MovieManage.Tests.csproj]

标签: c#asp.net-corexunit

解决方案


通常 InlineData 的重点是使用相同的测试逻辑,但隔离预期输入和输出的差异。

[Theory]
[InlineData(1, 10.00m)]
[InlineData(2, 14.50m)]
public void Test1(int movieId, decimal expectedPrice)
{
    var result = db.movieTable.Single(p => p.Id == movieId);
    Assert.True(result.Price == expectedPrice);
}

推荐阅读