使用 MVC3 和 EF4,如何充分测试依赖数据库往返来创建 IDENTITY 值的功能?
我有一个场景,被测试的代码将一条记录插入数据库,然后尝试使用其主键从数据库检索它。
这会以相同的方法发生在一系列记录上。
我正在嘲笑我的 ObjectContext 和 ObjectSets,所以当前的结果是“插入”到我的 FakeObjectSet 中的每条记录的主键都是 0。
在我只插入一条记录并断言该记录存在的情况下,这很好...但是当我插入多个并且我的工作流程需要通过主键检索特定记录时,我的查询会返回多个结果,因为所有插入的主键均为 0。
有什么想法吗?
I have a scenario where the code under test inserts a record into a database, then attempts to retrieve it back from the database using its primary key.
This happens over a series of records in the same method.
I am mocking my ObjectContext and ObjectSets, so the current result is that each record "inserted" into my FakeObjectSet is given a primary key of 0.
In the case where I am only inserting a single record and asserting the record exists, this is fine...but when I am inserting multiple and my workflow requires retrieving specific records by primary key, my queries return multiple results since all inserts have a primary key of 0.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以向
FakeObjectSet
添加一个事件,该事件将在调用AddObject
时引发。然后在您的测试中,添加一个事件处理程序来设置要添加的对象的Id
。例如,假对象集的简化版本:
在测试中,当您想要设置递增的
Id
值时,请将处理程序添加到您的FakeObjectSet
并更新对象的Id
:You can add an event to your
FakeObjectSet<T>
that will be raised whenAddObject
is called. Then in your test, add an event handler to set theId
of the object being added.For example, a simplified version of a fake object set:
And in your test, when you want to set an incrementing
Id
value, add a handler to yourFakeObjectSet<T>
and update the object'sId
:您的模拟存储库可以从 id 生成器(简单计数器)检索 id,该生成器随着每次连续调用而递增。
Your mock repository could retrieve the id from an id generator (simple counter), that increments with each consecutive call.
我应该存根数据库的返回值,依此类推,我将自己决定每个对象将具有哪些主键。
您的测试目标是什么?
I should stub the return values from the database and so on I will by myself decide what primary keys each object will have.
What is your goal for the tests?