c# - 将 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]
解决方案
通常 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);
}
推荐阅读
- omnet++ - 是否可以多次向同一个节点发送相同的消息?
- c# - 为什么我们从单个黑色像素生成的位图是 1KB?
- python - 如果结果为真,如果结果为假,我如何获得绿色矩形 =(纸 == dict_k)?
- django - InlinePanel 中引用对象的 Wagtail 渲染
- python - 为什么我的字典在可变和不可变之间交替?
- python - Python 脚本小部件的多个输入
- vue.js - Vue Router 中如何处理重复的子路由
- java - Spigot Plugin - KitPvP 套件能力
- azure-devops - Devops 部署到 D1 共享基础设施应用程序被忽略
- nginx - Ngixg反向代理-真实IP