修复了 SubSonic 3 的 TestRepository 的问题

编程入门 行业动态 更新时间:2024-10-26 14:40:48
本文介绍了修复了 SubSonic 3 的 TestRepository 的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我一直在尝试使用 SubSonic 3.0 的测试存储库支持进行单元测试,但遇到了一些问题,所以我想我记录了它们以及我提出的修复:

I've been trying to use SubSonic 3.0's test repository support for unit testing but encountered a few issues, so I thought I document them, and the fixes I've come up with:

显然没有数据库,自动递增列不会自动工作,但如果像我一样,你对所有标识列使用简单的整数或长整数,这个修复工作得很好:

Obviously with no DB, auto-increment columns don't work automatically, but if like me you're using simple ints or longs for all identity columns, this fix works well:

(这是此处的副本),包括在内)

在 ActiveRecord.tt 中:

In ActiveRecord.tt:

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

1: In the top of the function 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 行下,添加:

2: Under the line public bool TestMode = false, add:

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

对象相等比较被破坏

使用默认的 ActiveRecord 模板,对象相等不起作用.因此从数据库中删除项目不起作用,因为 TestRepository 中使用的 List.Remove() 无法匹配被删除的项目.这可以在 tt 模板中使用以下内容修复:(即:将=="替换为Equals()")

Object Equality Comparison is Broken

Using the default ActiveRecord template, object equality doesn't work. So removing items from the DB doesn't work since the List<>.Remove() used in the TestRepository fails to match the item being removed. This can be fixed in the tt templates with the following: (ie: replacing "==" with "Equals()")

在 ActiveRecord.tt 中:

In 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) 对测试仓库失败,因为 DeleteMany 没有实现.解决这个问题需要获取源代码并自行构建,但这里有一个似乎有效的实现:

DeleteMany is Not Implemented in the Test Repository

Operations like this records.Delete(x => x.whatever == whatever) fail against the test repo because DeleteMany is not implemented. Fixing this requires getting the source and building yourself, but here's an implementation that seems to work:

在 TestRepository.cs 中:

In 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 并检查最新的源代码(我们已经修复了其中的一些).如果您发现某些问题可以修复 - 非常欢迎使用补丁.

Thanks for this - but the best thing to do is to tell us about your issues :). StackOverflow is more for answering questions - I might suggest heading over to Github and checking the latest source (we've fixed a number of these). If you see that some things can be fixed - patches are very welcome.

更多推荐

修复了 SubSonic 3 的 TestRepository 的问题

本文发布于:2023-11-06 16:07:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1564164.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:SubSonic   TestRepository

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!