【发布时间】:2023-04-04 08:35:01
【问题描述】:
一直是 Subsonic 2.x 的长期用户,并且已经使用了一点 3.x,但我最近开始将我们对 SS 的使用从使用存储库转换为 ActiveRecord。我目前在我们的一些单元测试中遇到了挫折,我想知道这是否可能是因为我误解了 Setup() 方法的意图。唉,我能找到的唯一文档是 Rob Conery 的blog。
在我的单元测试中,我填充了一个对象集合,比如说一个帐户列表。然后,我想验证某些代码是否通过属性正确过滤了 repo,比如说电子邮件地址。我的(简化的)单元测试设置如下。
问题在于,当使用“测试”连接字符串时,似乎我针对 repo 编写的任何 LINQ 都会返回我所有我填充到安装程序中的记录--这让我想知道我是否误解了 Setup() 的意图。就好像它的行为就像一个模拟设置,例如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 对吗?
停下来!?
编辑:
Josh Rivers 询问似乎是类似的question,尽管它似乎没有得到解决。链接完整性。
【问题讨论】:
标签: unit-testing activerecord subsonic3