3

単体テストを書くときに最も苦労することの 1 つは、何をテストし、何をテストしないかということです。

したがって、次のコードが与えられた場合、どのテストを作成する必要がありますか:

public static class Enforce
{
    public static T ArgumentNotNull<T>(T parameter, string parameterName) where T : class
    {
        if (parameterName.IsNullOrWhiteSpace())
            throw new ArgumentNullException("parameterName");

        if (parameter.IsNull())
            throw new ArgumentNullException(parameterName);

        return parameter;
    }

    public static string ArgumentNotNullOrEmpty(string parameter, string parameterName)
    {
        ArgumentNotNull(parameter, parameterName);

        if (parameter.IsNullOrEmpty())
            throw new ArgumentException(parameterName);

        return parameter;
    }

    public static string ArgumentNotNullOrWhiteSpace(string parameter, string parameterName)
    {
        ArgumentNotNull(parameter, parameterName);

        if (parameter.IsNullOrWhiteSpace())
            throw new ArgumentException(parameterName);

        return parameter;
    }

    public static T NotNull<T>(T instance) where T : class
    {
        instance.IfNullThrow<T, NullReferenceException>(String.Format(EnforceResources.TypeNotNull, typeof(T).FullName));

        return instance;
    }
}

}

ArgumentNotNull<T>スローされる例外をテストするテストと、スローされない例外をテストするテストを作成する必要がありますか? 私の質問は、期待されるものと正反対のものをテストするテストを書くべきですか?

    [Fact]
    public void ShouldThrowArgumentNullException()
    {
        object arg = null;

        Assert.Throws<ArgumentNullException>(() => { Enforce.ArgumentNotNull(arg, "arg"); });
    }

    [Fact]
    public void ShouldNotThrowArgumentNullException()
    {
        var arg = "Test";

        Assert.DoesNotThrow(() => { Enforce.ArgumentNotNull(arg, "arg"); });
    }
4

2 に答える 2

1

単体テストの概念は、コードが期待どおりに機能することを確認することです。

したがって、例外がスローされることが予想される場合は、正しい例外についてテストする必要があります。

単体テストの作成に関する基本的な概念とヒントを次に示します。

http://www.slideshare.net/homespothq/unit-testing-concepts-and-best-practices

于 2013-03-17T07:42:27.103 に答える
1

すべてのコードをテストするために最善を尽くすべきです。つまり、すべてのパブリック メソッドとその中のシナリオが、すべての内部ロジックをできるだけ多くカバーすることを意味します。

したがって、3 つのテストを作成する必要があります。1 つは最初の例外、もう 1 つは 2 番目の例外、もう 1 つは何もスローされない場合です。

これらのテストの命名規則に関して、これは興味深いかもしれません: https://stackoverflow.com/a/1594049/1373170

于 2013-03-17T07:37:05.770 に答える