Unit testing 亚音速3 ActiveRecord设置()行为

Unit testing 亚音速3 ActiveRecord设置()行为,unit-testing,activerecord,subsonic3,Unit Testing,Activerecord,Subsonic3,我是亚音速2.x的长期用户,也曾使用过3.x,但我最近开始将SS的使用从使用存储库过渡到使用ActiveRecord。我目前在进行一些单元测试时遇到了障碍,我想知道这是否是因为我误解了Setup()方法的意图。唉,我能找到的唯一文件是罗布·科纳利的 在我的单元测试中,我填充了一个对象集合,比如说一个帐户列表。然后我想验证一些代码是否通过属性(比如电子邮件地址)对回购协议进行了正确过滤。下面是我的(简化的)单元测试设置 更重要的是,当使用“Test”连接字符串时,似乎我针对repo编写的任何LIN

我是亚音速2.x的长期用户,也曾使用过3.x,但我最近开始将SS的使用从使用存储库过渡到使用ActiveRecord。我目前在进行一些单元测试时遇到了障碍,我想知道这是否是因为我误解了Setup()方法的意图。唉,我能找到的唯一文件是罗布·科纳利的

在我的单元测试中,我填充了一个对象集合,比如说一个帐户列表。然后我想验证一些代码是否通过属性(比如电子邮件地址)对回购协议进行了正确过滤。下面是我的(简化的)单元测试设置

更重要的是,当使用“Test”连接字符串时,似乎我针对repo编写的任何LINQ都会返回我填充到设置中的所有记录,这让我怀疑我是否误解了设置()的意图。它的行为就像一个模拟设置,例如mymock.setup(foo=>foo.Email)user@user.com").

在其他地方,我尝试进行单元测试的代码基本上是执行Find()。真正的实现有一组半复杂的条件,但即使是简化的条件也似乎不起作用


  Account.Find(a => a.Email == "immaletyou@finish.com").SingleOrDefault();
上面的代码将爆炸,但有一个异常指示lambda返回了多个元素。当我调试到测试中时,果然,Find()的结果是我通过Setup()方法填充到模拟repo中的所有对象

Rob C哀叹ActiveRecord很难测试,这是一个令人沮丧的问题。但我无法想象测试场景会在这样一个平凡的样本上出现突破——这是PEBKAC,对吗

哈尔普

编辑:

乔什·里弗斯问,什么似乎是相似的,尽管它似乎没有得到解决。链接以获取完整性。

我将为未来的任何一方回答我自己的问题,并不是说有大量的活动涌向这个主题:

事实证明,测试存储库(Subsonic 3.03)的当前实现有一个bug,它基本上只返回存储库中的整个值集。目前的解决方案(我自己还没有测试过,但已经为其他人工作过)是拉取当前的源代码主线并重新编译

见:


  Account.Find(a => a.Email == "immaletyou@finish.com").SingleOrDefault();