gpt4 book ai didi

c# - 测试 EF 保存更改修饰符。传入 DbPropertyValues

转载 作者:可可西里 更新时间:2023-11-01 07:57:50 24 4
gpt4 key购买 nike

尝试通过覆盖 EF SaveChanges 方法在 C# 中执行一些业务逻辑。
这个想法是对诸如此字段是否已更改更新此字段之类的事情进行一些高级计算。而且这个字段是子类减去一些其他字段的总和,高级业务垃圾你懂的。

因为它真的很复杂,我们想测试一下它的填充物。添加测试效果很好,但是我们似乎无法测试更新测试,因为我们已经编写了一个接口(interface),其中传递了相关方法签名看起来像这样

void Update(object entity, DbPropertyValues currentValues, DbPropertyValues originalValues);

在完整的 EF 中调用它时效果很好

    public override int SaveChanges()
{
var added = ChangeTracker.Entries().Where(p => p.State == EntityState.Added).Select(p => p.Entity);
var updated = ChangeTracker.Entries().Where(p => p.State == EntityState.Modified).Select(p => p);

var context = new ChangeAndValidationContext();

foreach (var item in added)
{
var strategy = context.SelectStrategy(item);
strategy.Add(item);
}

foreach (var item in updated)
{
var strategy = context.SelectStrategy(item);
strategy.Update(item.Entity, item.CurrentValues, item.OriginalValues);
}
return base.SaveChanges();
}

我们只是不知道如何为我们的测试传递原始或更新的 DbPropertyValues。请帮助我们弄清楚如何测试该方法。

最佳答案

如果您有 Visual Studio 2012 Update 2+,则可以通过右键单击测试项目中的项目引用来为 EntityFramework“添加 Fakes 程序集”。

添加后,您可以创建完全在您控制之下的 System.Data.Entity.Infrastructure.Fakes.ShimDbPropertyValues 实例。例如

var shim = new System.Data.Entity.Infrastructure.Fakes.ShimDbPropertyValues();
shim.ItemGetString = s => "Hello, World!";

GetString 被调用到那个伪造/垫片 DbPropertyValues 时,它将返回“Hello, World!”。

此处有更多详细信息:https://msdn.microsoft.com/en-us/library/hh549175.aspx

关于c# - 测试 EF 保存更改修饰符。传入 DbPropertyValues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33119593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com