关于使用数据访问层的单元测试模型对象的另一个“简单”问题。
当我 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/