解决亚音速3的testrepository的问题
-
20-09-2019 - |
题
我一直在尝试使用亚音速3.0的测试存储库支持单元测试,但遇到了一些问题,所以我认为我记录了它们,以及我想出的修复程序:
自动收入列不起作用
显然,没有数据库,自动插件无法自动工作,但是如果像我一样,您使用简单的INT或longs来适用于所有身份列,则此修复程序效果很好:
(这是来自 这里, ,包括完整性)
在Activerecord.tt中:
1:在功能的顶部公共void add(idataprovider提供商){
public void Add(IDataProvider provider){
<#if(tbl.PK.SysType=="long" || tbl.PK.SysType=="int") {#>
if (TestMode)
{
this.<#=tbl.PK.CleanName#>=++next_test_autoid;
}
<#}#>
2:在行公共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模板,对象平等行不通。因此,从DB中删除项目不起作用,因为TestRepository中使用的列表<>。删除()无法匹配要删除的项目。可以在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);
}
}
测试存储库中未实现删除
这样的操作 records.Delete(x => x.whatever == whatever)
由于未实施删除,因为未能实施测试存储库。解决此问题需要获取来源并建立自己,但以下是一个似乎有效的实现:
在testrepository.cs中:
public int DeleteMany(Expression<Func<T, bool>> expression)
{
foreach (var x in _items.AsQueryable().Where(expression).ToList())
{
_items.Remove(x);
}
return 0;
}
解决方案
谢谢您 - 但最好的办法是告诉我们您的问题:)。 Stackoverflow更多地用于回答问题 - 我可能建议前往Github并检查最新的来源(我们已经修复了其中的许多)。如果您发现某些事情可以解决 - 非常欢迎补丁。
其他提示
至于第2点,如果尚未保存记录,则仍然违反,因为它正在比较KeyValue()。为了确保非保存记录也具有真正的平等性,我们还必须测试记录是否new,如果是的,请确定其他平等策略
不隶属于 StackOverflow