何をテストし、何をテストしないかを把握しようとしています。
この非常に単純なユーティリティ クラスを考えると、次のようになります。
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 と FluentAssertions を使用しています。