我一直在尝试使用亚音速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;
}