【发布时间】:2011-06-09 03:40:35
【问题描述】:
我有一个阅读 pop3 电子邮件服务器的课程。我想为包含类编写一些单元测试,所以我需要模拟 POP3 服务器类。我正在使用 OpenPOP.Net。所以我有一个这样的构造函数:
EmailHost(string email, string password, string pop3Address, int port)
... etc....
然后我有一个连接类:
private void Connect()
{
_pop3 = new Pop3Client();
etc...
因此,对 Pop 客户端的引用隐藏在类的内部。为了能够模拟它,我需要做一些时髦的事情,因为使 EmailHost 在 Pop3Client 上成为泛型,或者添加一些默认的函数来执行上述行:
public EmailHost<PopClass>(...)
或
public EmailHost(... params, Func popGenerate = () => new Pop3Client())
所以看来我必须稍微妥协我的构造函数才能使其与模拟一起使用。 (显然我会定义一个 IPop3Client 等等。)
关于如何正确执行此操作的任何想法?
编辑:
jOk 提供了一个有趣的答案,问题是它不适合我正在做的事情的结构。在这种特殊情况下,我需要在 Pop 客户端中处理多个电子邮件地址,并且这些地址是动态添加的。因此,当您添加每个电子邮件地址时,您需要创建一个新的 Pop3Client。另外,我想隐藏 POP3 本身的实现,这样他们的用户就不需要尽可能多地了解它。
对此还有其他想法吗?
谢谢你输入btw。
【问题讨论】:
-
您在项目中使用 Spring 吗?
标签: c# unit-testing mocking