作为Subsonic 2.x的长期用户并且已经使用了3.x,但我最近开始将使用SS从使用存储库转换为ActiveRecord。我目前正在绊倒我们的一些单元测试,我想知道是否可能是因为我误解了Setup()方法的意图。唉,我能找到的唯一文件是Rob Conery的blog。
在我的单元测试中,我填充了一组对象,比如说一个帐户列表。然后我想验证一些代码是否正确地过滤了属性的repo,让我们说一下电子邮件地址。我的(简化)单元测试设置如下。
踢球者是在使用“Test”连接字符串时,看起来我对着repo编写的任何LINQ都会返回 all 我填充到Setup中的记录 - 这让我想知道我是否误解了Setup()的意图。就好像它的行为类似于Mock设置,例如mymock.Setup(foo => foo.Email).Returns(“user@user.com”)。
List accounts = new List()
{
new Account() { FirstName = "Paul", LastName = "McCartney", Email = "paul@beatles.com" },
new Account() { FirstName = "John", LastName = "Lennon", Email = "john@beatles.com" },
new Account() { FirstName = "Ringo", LastName = "Starr", Email = "ringo@beatles.com" },
new Account() { FirstName = "George", LastName = "Harrison", Email = "george@beatles.com" },
new Account() { FirstName = "Taylor", LastName = "Swift", Email = "immaletyou@finish.com" }
};
DB.Account.ResetTestRepo();
DB.Account.Setup( accounts );
在其他地方,我试图进行单元测试的代码基本上是执行Find()。真正的实现具有一组半复杂的条件,但即使是简化的条件似乎也不起作用。
Account.Find(a => a.Email == "immaletyou@finish.com").SingleOrDefault();
以上将弹出一个异常,表明lambda返回了多个元素。当我调试测试时,肯定的是,Find()的结果是我通过Setup()方法填充到模拟仓库中的所有对象。
Rob C感叹ActiveRecord很难测试 - 这真是太糟糕了。但是我无法想象测试场景是如何破坏这样一个平凡的样本 - 它是PEBKAC吗?
HALP!?
修改
Josh Rivers询问看起来类似question的内容,但似乎没有得到解决。链接完整性。
答案 0 :(得分:1)
要为未来的任何一方回答我自己的问题,而不是因为这个问题突然出现了激烈的活动:
事实证明,测试存储库(Subsonic 3.03)的当前实现有一个错误,它基本上只返回存储库中的整个值集。当前修复(没有测试过自己,但已经为其他人工作过)是拉动源代码的当前主线并重新编译。