unit-testing - 模拟 LINQ To SQL 数据提供程序,实时代码上的 NotSupportedException

标签 unit-testing linq-to-sql mocking

关于使用数据访问层的单元测试模型对象的另一个“简单”问题。

当我 mock 我的 Table<Customer>IQuerable<ICustomer> , 其中new List<FakeCustomer>().AsQuerable()用于内存数据存储的作用,以下代码完美通过单元测试:

var filteredCustomers = from c in dal.Customers
                        where c.Code.ToUpperInvariant() == "ABC"
                        select c;

运行应用程序时,我当然会得到 NotSupportedException (因为 ToUpperInvariant() )。也许这是一个相当蹩脚的例子,因为可以通过替换 ToUpperInvariant() 来解决那里的问题。至 ToUpper() ,但你明白了。

问题:这种不一致是编写真实单元而不是集成测试的“费用”吗?或者我做错了什么,例如是否应该有另一种方法以完全模拟 Linq To SQL DataContext 的方式来模拟 DataContext?

目前我正在排队测试数据库而不是内存模拟来捕获此类错误。

感谢您的建议。

最佳答案

是的,这正是您为不是集成测试而支付的费用。当然,进行集成测试和单元测试是个好主意。

根据我的经验,ORM 很难避免此类问题 - 您如何在不运行 SQL Server 的情况下准确模拟整个 SQL Server?这并不意味着 ORM 没有用或类似的东西 - 只是存在局限性。

关于unit-testing - 模拟 LINQ To SQL 数据提供程序,实时代码上的 NotSupportedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3639175/

相关文章:

c# - 查询执行计划 - Where 子句何时执行?

c# - linq to sql 和 DataContext 中的隔离级别

python - 如何使用 Python Mock 引发异常 - 但将 Errno 设置为给定值

mocking - WinRT的模拟框架?

Python read_text() 添加额外的字符串

android - 如何使用协程测试加载指示器(TestCoroutineScope 已弃用)?

java - Mockito - 如何监视 doAnswer 中的调用参数

c# - ASP.Net Core 单元测试异步 Controller

c# - 为什么 LINQ to SQL 实体关联在插入新记录时创建新的(重复的)行?

python-3.x - python : mock file input for testing function