【问题标题】:Subsonic 3 ActiveRecord Setup() behaviorSubsonic 3 ActiveRecord Setup() 行为
【发布时间】: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


    【解决方案1】:

    将为任何未来的聚会回答我自己的问题,而不是说有大量的活动涌向这个线程:

    事实证明,测试存储库 (Subsonic 3.03) 的当前实现存在一个错误,它基本上只返回存储库中的整个值集。当前的修复(自己没有测试过,但对别人有用)是拉取源代码的当前主线并重新编译。

    见:Subsonic Issue 109

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多