gpt4 book ai didi

.net - 如何测试涉及数据库和 Exchange 服务器访问的类(class)?

转载 作者:搜寻专家 更新时间:2023-10-30 19:42:13 25 4
gpt4 key购买 nike

我刚刚完成了使用 C# 和 Nunit 进行测试驱动开发的教程。我现在想为我的新项目使用单元测试,但我在编写测试时遇到困难。如何最好地为涉及数据库或 Web 服务访问的类编写单元测试?有人可以给我一些类/单元测试示例吗?

最佳答案

  • 设计一个包含调用数据库、发送电子邮件等功能的接口(interface)......
  • 编写您的类的实现并使用 DI 将此类加载到依赖类中
  • 使用 Mock 框架创建 Mock 对象并在单元测试中对其设置期望值。

这是一个示例伪代码(这里使用的 Mock 生成器是 Moq 框架):

interface IEmailer
{
void Send(Email email);
}

class RealEmailer : IEmailer
{
public void Send(Email email)
{
// send
}
}

class UsesEmailer
{
private IEmailer _emailer;

public UsesEmailer(IEmailer emailer)
{
_emailer = emailer;
}


public foo(Email email)
{
// does other stuff
// ...
// now sends email
_emailer.Send(email);
}

}

class MyUnitTest
{
[Test]
public Test_foo()
{
Mock<IEmailer> mock = new Mock<IEmailer>();
Email m = new Email();
mock.Expect(e => e.Send(It.Is<Email>(m)));
UsesEmailer u = new UsesEmailer(mock.Object);
u.Send(m);
mock.Verify();
}

}

更新

现在,如果您正在测试 RealEmailer,有几种方法,但基本上您必须设置测试以向您发送电子邮件,然后您 checkin .这不完全是一个单元测试,因为您不仅要测试您的代码,还要测试配置、网络、交换服务器……事实上,如果您使 RealEmailer 变小,代码很少,您可以跳过编写单元对其进行测试。

关于.net - 如何测试涉及数据库和 Exchange 服务器访问的类(class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4450130/

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