C# 用xUnit理论使用IQueryable对象
我有一个运行SqlServer数据库计算的程序。我想测试一下这些计算是否正确。目前,我唯一能做到这一点的方法是在理论上使用answer int,并验证函数是否为相应的数据库行提供了answer int 这是次优的,因为每个测试都有两个整数,即要测试的行的答案和索引C# 用xUnit理论使用IQueryable对象,c#,asp.net-core,xunit,C#,Asp.net Core,Xunit,我有一个运行SqlServer数据库计算的程序。我想测试一下这些计算是否正确。目前,我唯一能做到这一点的方法是在理论上使用answer int,并验证函数是否为相应的数据库行提供了answer int 这是次优的,因为每个测试都有两个整数,即要测试的行的答案和索引 [Theory] [InlineData(db.movieTable.Take(1).Select(p => p))] public void Test1(IQueryable<movieTable> value)
[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);
}
[理论]
[InlineData(db.movieTable.Take(1).选择(p=>p))]
公共void Test1(IQueryable值)
{
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):错误CS0182:属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式[C:\Users\co-op7\Documents\GeorgeCode\MovieSite\MovieManage.Tests\MovieManage.Tests.csproj]
通常,内联数据的要点是使用相同的测试逻辑,但隔离预期输入和输出的差异
[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);
}
通常,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);
}
一旦调用
ToList()
就不需要ElementAt()
。您可以像对待任何列表一样使用[0]
,您想做什么?您没有在任何地方使用result
。您使用value
的方式也没有意义,它检查测试数据是否有特定的价格。它不测试您自己的代码。任何列表或数组都可以通过调用AsQueryable()
转换为IQueryable
。如果您想测试您的查询,您可以创建一个电影数组,并使用var myArray=…,将其转换为IQueryable。。。;var queryable=myArray.AsQueryable()
并使用它。Take(1)。Select(p=>p)
等同于单独使用Take(1)
.First()
会更好,因为没有理由调用ToList().ElementAt(0)
一旦调用ToList()
就不需要ElementAt()
。您可以像对待任何列表一样使用[0]
,您想做什么?您没有在任何地方使用result
。您使用value
的方式也没有意义,它检查测试数据是否有特定的价格。它不测试您自己的代码。任何列表或数组都可以通过调用AsQueryable()
转换为IQueryable
。如果您想测试您的查询,您可以创建一个电影数组,并使用var myArray=…,将其转换为IQueryable。。。;var queryable=myArray.AsQueryable()
并使用它。Take(1)。Select(p=>p)
等同于单独使用Take(1)
.First()
会更好,因为没有理由调用ToList().ElementAt(0)