首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Moq验证File.Delete的调用

用Moq验证File.Delete的调用
EN

Stack Overflow用户
提问于 2017-09-14 20:48:23
回答 1查看 644关注 0票数 2

我刚开始进行单元测试。我试着测试一些非常简单的东西:

代码语言:javascript
复制
[HttpPost]
public ActionResult EditProfile(ProfileViewModel model)
{
    if (ModelState.IsValid)
    {
        // Retrieve current user
        var userId = User.Identity.GetUserId();
        var user = _dataRepository.GetUserById(userId);

        //If it isn't the single-instance default picture, delete the current profile
        // picture from the Profile_Pictures folder
        if (!String.Equals(user.ProfilePictureUrl, _defaultPic))
            System.IO.File.Delete(Server.MapPath(user.ProfilePictureUrl));

在这部分代码中,我创建了一个条件,在这个条件下,该行将计算为true:

代码语言:javascript
复制
if (!String.Equals(user.ProfilePictureUrl, _defaultPic))

我想验证一下是否调用了System.IO.File.Delete

做这件事最好的方法是什么?

我是否需要通过将System.IO.File.Delete调用封装到实现接口的类中来重构,以使我能够模拟它并验证它是否被调用?

我在用莫克。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-15 14:09:15

我是否需要通过将System.IO.File.Delete调用封装到实现接口的类中来重构,以使我能够模拟它并验证它是否被调用?

封装实现关注点

代码语言:javascript
复制
public interface IFileSystem {
    void Delete(string path);

    //...code removed for brevity
}

public class ServerFileSystemWrapper : IFileSystem {
    public void Delete(string path) {
        System.IO.File.Delete(Server.MapPath(path));
    }

    //...code removed for brevity
}

它将通过构造函数注入显式地注入到受抚养人中并使用。

代码语言:javascript
复制
if (!String.Equals(user.ProfilePictureUrl, _defaultPic))
    _fileSystem.Delete(user.ProfilePictureUrl); //IFileSystem.Delete(string path)

这将允许在需要时设置并验证模拟。

代码语言:javascript
复制
//Arrange
var mockFile = new Mock<IFileSystem>();

var profilePictureUrl = "...";

//...code removed for brevity

var sut = new AccountController(mockFile.Object, ....);

//Act
var result = sut.EditProfile(model);

//Assert
result.Should().NotBeNull();
mockFile.Verify(_ => _.Delete(profilePictureUrl), Times.AtLeastOnce());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46227992

复制
相关文章

相似问题

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