【发布时间】:2019-01-18 16:43:58
【问题描述】:
我有一个从 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]
【问题讨论】:
-
一旦你打电话给
ToList(),你就不需要ElementAt()。您可以像使用任何列表一样使用[0] -
你想做什么?您没有在任何地方使用
result。你使用value的方式也没有意义,它检查测试数据是否有一定的价格。它不会测试您自己的代码。 -
任何列表或数组都可以通过调用
AsQueryable()转换为IQueryable<T>。如果您想测试您的查询,您可以创建例如电影数组并将其转换为带有var myArray=...;var queryable=myArray.AsQueryable()的 IQueryable 并使用它。 -
Take(1).Select(p => p)相当于单独的Take(1)。.First()会更好,因为没有理由打电话给ToList().ElementAt(0)
标签: c# asp.net-core xunit