我刚刚在Nunit的c#中完成了测试驱动开发的教程。 我现在想为我的新项目使用单元测试,但是我在编写测试时遇到了困难。 如何为涉及数据库或Web服务访问的类编写单元测试? 有人能给我一些课/单元测试的例子吗?
答案 0 :(得分:5)
这是一个示例伪代码(此处使用的模拟生成器是 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
,有几种方法,但基本上您必须设置测试以向您发送电子邮件并且您签入。这不是一个单元测试,因为你不仅要测试你的代码,还要测试配置,网络,交换服务器......实际上如果你让RealEmailer
只有很少的代码,你可以跳过为它编写单元测试