gpt4 book ai didi

c# - 如何对将记录插入 RIA 服务数据库的函数进行单元测试?

转载 作者:行者123 更新时间:2023-11-30 16:35:43 24 4
gpt4 key购买 nike

这是一个与实体一起工作的示例函数,将其保存到数据库,然后由于我们无法为其编写单元测试而导致问题。检查一下:

// this class exists in a Silverlight Class Library
public class EmployeeSaver
{
....

public void Go()
{
Employee e = new Employee();

e.Name="Jeremiah";

... // Other stuff that really needs to be tested

_DataContext.Employees.Add(e);
_DataContext.SubmitChanges();

}
}

由于 RIA 服务的性质,DomainService 不在 Silverlight 单元测试框架内运行。这意味着我在进行单元测试时无法访问 RIA。

我们已经考虑过模拟数据库,但是这个类实际上创建了一个要添加到数据库中的实体(员工)。这是有问题的,因为 Mock 数据库不使用此实体,而是使用看起来与原始实体相似的 MockEntity 类。

我们不是要测试 RIA 本身,而是要测试我们如何使用 RIA 生成的实体。

我的最终目标是编写一个与此类似的函数:

[TestMethod]
public void Test()
{
EmployeeSaver s = new EmployeeSaver();
s.Go();

Assert.IsEqual( DataContext.Employees.Last().Name, "Jeremiah" );
}

如何测试此功能?我应该使用什么测试框架?我离使用 Silverlight 测试框架还远吗?

最佳答案

在您的单元测试中,实例 s 需要有一个 _DataContext 的 stub 实现。当调用 Go 方法时,它会调用: _DataContext.Employees.Add(e); _DataContext.SubmitChanges();它会调用你的 stub 。然后, stub 应记录添加员工和提交更改的事实。

调用 Go 后,您应该查询 stub 以确保添加了新员工,并调用了 SubmitChanges。

作为次要说明:我不太同意其他答案的最后一部分,因为您不应该关心 Go 是否调用了 _DataContext 的各种方法。确实,您并不关心在这里测试 _DataContext 方法,但是 Go 的单元测试需要确保 Go 方法正确调用 _DataContext 方法。基本原理是 Go 方法的每一行都应该是可测试的。如果您没有进行此验证,那么您可以删除对 _DataContext 方法的调用,从而破坏代码,但单元测试不会捕获它。这将打破 Bob Martin 的“TDD 三个规则”原则。

关于c# - 如何对将记录插入 RIA 服务数据库的函数进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1562224/

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