【问题标题】:Subsonic 3 Active Record TestRepository identity column not incrementedSubsonic 3 Active Record TestRepository 标识列未增加
【发布时间】:2014-10-23 04:22:19
【问题描述】:

我正在使用 Subsonic 3.0.0.3 进行单元测试。单元测试按预期运行,记录计数断言通过。但是,测试框架不会自动增加标识列。

例如

var p1 = new Person() { Name = "Jack" };
p1.Add();
var p2 = new Person() { Name = "Jill" };
p2..Add();
var t1 = Person.SingleOrDefault(p => p.Name == "Jack");
var t2 = Person.SingleOrDefault(p => p.Name == "Jill");

T4模板读取的表结构

CREATE TABLE Person
(
    Id int IDENTITY(1,1) PRIMARY KEY
    ,Name NVARCHAR(255) NOT NULL 
)

连接字符串

<add name="SomeDb" connectionString="Test"/>

t1 和 t2 按预期设置了 name 属性,但两者的 Id 属性均为 0。

这是设计使然吗?如果是这样如何处理需要按ID选择记录的测试?

【问题讨论】:

    标签: unit-testing subsonic


    【解决方案1】:

    TestRepository 不知道您的 DB 位是如何设置的(怎么可能?)所以如果您希望它自动递增,您需要自己设置。

    【讨论】:

      【解决方案2】:

      这是我认为有用的 ActiveRecord 模板的更改。基本上它处理一个 int 或 long 主键列,并在测试模式下自动分配一个新的 id。需要对 ActiveRecord.tt 模板进行两处更改:

      1:在函数的顶部 public void Add(IDataProvider provider){

              public void Add(IDataProvider provider){
      
      <#if(tbl.PK.SysType=="long" || tbl.PK.SysType=="int") {#>
                  if (TestMode)
                  {
                      this.<#=tbl.PK.CleanName#>=++next_test_autoid;
                  }
      
      <#}#>
      

      2:在public bool TestMode = false这一行下,添加:

              public bool TestMode = false;
      <#if(tbl.PK.SysType=="long" || tbl.PK.SysType=="int") {#>
              private static <#=tbl.PK.SysType#> next_test_autoid = 0;
      <#}#>
      

      【讨论】:

      • 没想到直接修改T4模板。谢谢。
      【解决方案3】:

      (我还没有足够的积分来评论,但这是为了回应 cantabilesoftware 的回答。)

      我的数据库中有一个子类型关系,其中两个表是 1->1。如果键字段已经分配了值,我必须稍微修改您的模板以跳过逻辑:

      <#if(tbl.PK.SysType=="long" || tbl.PK.SysType=="int") {#>
                  if (TestMode && <#=tbl.PK.CleanName#> == 0)
                  {
                      this.<#=tbl.PK.CleanName#>=++next_test_autoid;
                  }
      <#}#>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-08
        • 2018-01-14
        • 2015-01-29
        • 1970-01-01
        相关资源
        最近更新 更多