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