繁体   English   中英

使用最小起订量 - 无效方法 c# 的单元测试

[英]using moq - Unit test for void methods c#

我想为此 FirstPageLoad 方法编写单元测试。 这是一个 void 方法,所以我不知道如何为这个 void 方法编写单元测试。

public class PagingSevice : IPagingService
{
    private EventHandler<PageEventArgsHelper> pageEventArgs;

    private List<string> PageGuids; 

    public void FirstPageLoad()
    {
        SetPageLoading(0);
    }

    public void SetGuids(List<string> pageGuids)
    {
        PageGuids = pageGuids;
    }


    private void SetPageLoading(int pageNumber)
    {
        if (!PageGuids.Any())
        {
            PageEventArgsHelper page = new PageEventArgsHelper(string.Empty, true, true);
            pageEventArgs?.Invoke(this, page);
            return;
        }

        bool isFirst = false;
        bool isLast = false;
        if (pageNumber == 0)
        {
            isFirst = true;
        }

        if (PageGuids.Count -1 == pageNumber)
        {
            isLast = true; 
        }

        PageEventArgsHelper pageArgs = new PageEventArgsHelper(PageGuids[pageNumber], isFirst, isLast);
        pageEventArgs?.Invoke(this, pageArgs);
    }
}

我可以使用 moq.verify 来测试这个方法吗?

在这种情况下返回 void 的方法没有什么特别之处。 您只需调用该方法并使用Verify方法来验证它是否像往常一样被调用,例如:

var mock = new Mock<IPagingService>();
mock.Object.FirstPageLoad();
mock.Verify(x => x.FirstPageLoad(), Times.Once);

当您调用公共FirstPageLoad方法时,您可能还需要验证该事件是否SetPageLoading方法引发。

根据对上述问题的评论......

SetPageLoading(0) 是否有可观察到的副作用? ->没有
它是否修改了 object 中可以从外部看到的任何内容? ->没有
它会修改依赖项中的任何内容吗? ->没有

听起来可以对结果进行的唯一观察是“没有抛出异常”。 为此,您不需要嘲笑任何东西,甚至不需要断言任何东西。 在任何测试框架中,意外的异常都会导致测试失败。 所以只要没有异常,测试就通过了。 像这样简单的东西:

// arrange
var service = new PagingService();

// act
service.FirstPageLoad();

// assert
// no exception is thrown

现在,不太了解这个 object 做了什么,如果在这种情况下由于没有满足外部依赖关系而失败,那么将是外部可观察到的副作用。

我看不到构造函数或任何注入依赖项的方法。 因此,如果有一个,那么构建单元测试是一个反转该依赖关系的机会,因此可以将其提供给 object。 但是,如果没有,并且一切都在 object 中私下发生,那么该功能就是一个黑匣子,可以观察到的只是没有异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM