我正在努力掌握测试什么和不测试什么。
给定这个非常简单的实用程序类:
public static class Enforce
{
public static void ArgumentNotNull<T>(T argument, string name)
{
if (name == null)
throw new ArgumentNullException("name");
if (argument == null)
throw new ArgumentNullException(name);
}
}
你会说以下测试就足够了吗?或者我还需要测试有效参数实际上不抛出的反向条件吗?
[Fact]
public void ArgumentNotNull_ShouldThrow_WhenNameIsNull()
{
string arg = "arg";
Action a = () => Enforce.ArgumentNotNull(arg, null);
a.ShouldThrow<ArgumentNullException>();
}
[Fact]
public void ArgumentNotNull_ShouldThrow_WhenArgumentIsNull()
{
string arg = null;
Action a = () => Enforce.ArgumentNotNull(arg, "arg");
a.ShouldThrow<ArgumentNullException>();
}
一般情况下,您需要测试反向条件吗?或者在这种情况下可以安全地假设吗?
请注意,我使用的是xUnit和FluentAssessments。
单元测试的重点是测试您编写的代码。考虑到ArgumentNullException是您使用的API的一部分,测试其行为是否符合您的期望就是测试API,而不是您的代码,这只会使水变得浑浊。
您拥有的单元测试测试您为编写的代码编写的方法的所有行为,因此就足够了。