使用最小起订量 - void 方法的单元测试 c#
using moq - Unit test for void methods c#
我想为此 FirstPageLoad 方法编写单元测试。这是一个无效方法,所以我不知道如何为这个无效方法编写单元测试。
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 来测试这个方法吗?
在此上下文中 returns void 的方法没有什么特别之处。您只需调用该方法并使用 Verify
方法来验证它是否像往常一样被调用,例如:
var mock = new Mock<IPagingService>();
mock.Object.FirstPageLoad();
mock.Verify(x => x.FirstPageLoad(), Times.Once);
您可能还想在调用 public FirstPageLoad
方法时通过 SetPageLoading
方法验证 event was raised。
根据对上述问题的评论...
Is there an observable side-effect from SetPageLoading(0)? -> No
Does it modify anything in the object which can be seen externally? -> No
Does it modify anything in a dependency? -> No
听起来唯一可以观察到的结果是“没有抛出异常”。为此,您不需要模拟任何东西甚至断言任何东西。在任何测试框架中,意外异常都会导致测试失败。所以只要没有异常,测试就通过了。像这样简单的东西:
// arrange
var service = new PagingService();
// act
service.FirstPageLoad();
// assert
// no exception is thrown
现在,不太了解这个对象的作用,如果在这种情况下因为没有满足外部依赖性而导致失败,那么 that 将是外部可观察到的副作用。
我看不到构造函数或任何注入依赖项的方法。因此,如果有一个,那么构建单元测试是一个反转依赖关系的机会,因此它可以提供给对象。但是,如果没有一个并且所有事情都在对象内私下发生,那么该功能就是一个黑盒子,可以观察到的只是没有异常。
我想为此 FirstPageLoad 方法编写单元测试。这是一个无效方法,所以我不知道如何为这个无效方法编写单元测试。
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 来测试这个方法吗?
在此上下文中 returns void 的方法没有什么特别之处。您只需调用该方法并使用 Verify
方法来验证它是否像往常一样被调用,例如:
var mock = new Mock<IPagingService>();
mock.Object.FirstPageLoad();
mock.Verify(x => x.FirstPageLoad(), Times.Once);
您可能还想在调用 public FirstPageLoad
方法时通过 SetPageLoading
方法验证 event was raised。
根据对上述问题的评论...
Is there an observable side-effect from SetPageLoading(0)? -> No
Does it modify anything in the object which can be seen externally? -> No
Does it modify anything in a dependency? -> No
听起来唯一可以观察到的结果是“没有抛出异常”。为此,您不需要模拟任何东西甚至断言任何东西。在任何测试框架中,意外异常都会导致测试失败。所以只要没有异常,测试就通过了。像这样简单的东西:
// arrange
var service = new PagingService();
// act
service.FirstPageLoad();
// assert
// no exception is thrown
现在,不太了解这个对象的作用,如果在这种情况下因为没有满足外部依赖性而导致失败,那么 that 将是外部可观察到的副作用。
我看不到构造函数或任何注入依赖项的方法。因此,如果有一个,那么构建单元测试是一个反转依赖关系的机会,因此它可以提供给对象。但是,如果没有一个并且所有事情都在对象内私下发生,那么该功能就是一个黑盒子,可以观察到的只是没有异常。