代码之家  ›  专栏  ›  技术社区  ›  Brad Robinson

亚音速3测试库问题的修复

  •  2
  • Brad Robinson  · 技术社区  · 15 年前

    我一直在尝试使用亚音速3.0的测试库支持单元测试,但遇到了一些问题,所以我想我会将它们记录下来,并提出修复方案:

    自动递增列不起作用

    显然,如果没有db,自动递增列不会自动工作,但是如果您像我一样使用简单的int或long来处理所有的identity列,那么这个修复程序工作得很好:

    (这是从 here ,包括完整性)

    在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;
    <#}#>
    

    对象相等比较已中断

    使用默认的activerecord模板,对象相等不起作用。因此,从数据库中删除项不起作用,因为testrepository中使用的列表<gt;.remove()与要删除的项不匹配。这可以在TT模板中用以下内容修复:(即:用“equals()”替换“==”)

    在activerecord.tt中:

        public override bool Equals(object obj){
            if(obj.GetType()==typeof(<#=tbl.ClassName#>)){
                <#=tbl.ClassName#> compare=(<#=tbl.ClassName#>)obj;
                return compare.KeyValue().Equals(this.KeyValue());
            }else{
                return base.Equals(obj);
            }
        }
    

    测试存储库中未实现DeleteMany

    像这样的行动 records.Delete(x => x.whatever == whatever) 测试repo失败,因为未实现deleteMany。解决这个问题需要获取源代码并构建自己,但这里有一个似乎可以工作的实现:

    在testrepository.cs中:

        public int DeleteMany(Expression<Func<T, bool>> expression)
        {
            foreach (var x in _items.AsQueryable().Where(expression).ToList())
            {
                _items.Remove(x);
            }
            return 0;
        }
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   user1151    15 年前

    谢谢你这么做-但最好的办法是告诉我们你的问题:)。stackoverflow更多的是用来回答问题-我可能建议您去github查看最新的源代码(我们已经修复了很多这样的问题)。如果你看到一些东西可以修复-补丁程序是非常受欢迎的。

        2
  •  0
  •   johnc    14 年前

    至于第2点,如果记录尚未保存,则仍然会断开,因为它在keyValue()上进行了比较。为了确保未保存的记录也具有真正的相等性,我们还必须测试该记录是否为新记录,如果是,则确定另一个相等策略

    推荐文章