如何测试涉及数据库和Exchange Server Access的类?

Luk*_*uke 3 .net database testing unit-testing web-services

我刚刚在Nunit的c#中完成了测试驱动开发的教程.我现在想为我的新项目使用单元测试,但是我在编写测试时遇到了困难.如何为涉及数据库或Web服务访问的类编写单元测试?有人能给我一些课/单元测试的例子吗?

Ali*_*tad 5

  • 设计一个包含调用db,发送电子邮件,...的功能的界面
  • 编写类的实现,并使用DI在依赖类中加载此类
  • 使用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();
    }

}
Run Code Online (Sandbox Code Playgroud)

UPDATE

现在,如果你正在测试RealEmailer,有几种方法,但基本上你必须设置测试发送电子邮件,然后你检查.这不是一个单元测试,因为你不仅要测试你的代码,还要测试配置,网络,交换服务器......实际上如果你做的RealEmailer代码很少,你可以跳过编写单元测试.