[英]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.