首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么开放源码模拟框架将允许模拟SmtpClient

什么开放源码模拟框架将允许模拟SmtpClient
EN

Stack Overflow用户
提问于 2014-07-26 12:51:31
回答 1查看 126关注 0票数 0

在手动测试了我之前的所有代码之后,我试图获得一些使用单元测试框架的经验。在一些初步研究的基础上,我正在使用微软测试和justMock Lite。但是,我遇到了一个相当简单的场景(从用户的角度来看),由于仅仅使用开源版本限制,我无法处理这个场景。下面是用于发送邮件的场景。

IEmailService接口

代码语言:javascript
复制
public interface IEmailService {
    bool SendEmail(string recipient, string message, string from);
}

WebMailService实现

代码语言:javascript
复制
public class WebEmailService : IEmailService {

    public bool SendEmail(string recipient, string message, string from) {
        try {
            MailMessage mail = new MailMessage(from, recipient,"",message);
            SmtpClient client = new SmtpClient();
            client.Send(mail);//This call needs to be mocked
            return true;
        }
        catch (Exception) {
            return false;
        }
    }
}

因此,我试图使用JustMock Lite测试上面的内容,如下所示

单元测试

代码语言:javascript
复制
[TestMethod]
public void SendMail_WhenNoExceptionThrown_ReturnsTrue() {
    IEmailService mailService = new WebEmailService();
    var smtpClient = Mock.Create<SmtpClient>();
    Mock.Arrange(() => smtpClient.Send(Arg.IsAny<MailMessage>())).DoNothing().MustBeCalled();
    bool returnCode = mailService.SendEmail("recipient", "message", "from");
    Assert.AreEqual(true, returnCode);
}

这导致了一个异常,我意识到这种模拟.Net方法在开源产品(JustMock Lite)中不受支持。

那么,是否有一种方法可以使用开源的模拟框架来绕过这样的场景,或者说这对一个人来说太过了。

注意:我已经通过option of wrapping the SmtpClient编写了一个包装器,并提取了相应的接口。但是,我只是好奇地想知道我们在不包装SmtpClient对象的情况下工作的其他方法。

EN

回答 1

Stack Overflow用户

发布于 2014-07-27 22:33:27

我建议,如果工具有限制,不要使用它。如果你不愿意付钱的话,就用I.eJustMock

你的情况很琐碎,我想你有几个选择

将SmtpClient方法包装在接口中,并公开它们,这样您就可以

使用可怜的人嘲弄/手写的手工模拟。

ISmtpClientService.SendEmail(.)

您可以创建可测试的SmtpClient服务,它实现了ISmtpClientService。此服务的真正实现是对真实SmtpClient的包装。

或者尝试从真实的SmtpClient继承-不确定这是可能的,如果不是,您可以创建一个可测试的版本,而不必像上面那样包装在接口中

仅仅是Mock就可以对这些虚拟方法进行存根。非常确定的是,它们确实允许客户端像其他免费框架一样对虚拟方法进行存根。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24971198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档