单元测试 - 要测试什么/不测试?

时间:2013-08-14 18:50:41

标签: unit-testing xunit

我正在努力掌握测试内容和不测试内容。

鉴于这个非常简单的实用程序类:

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。

1 个答案:

答案 0 :(得分:1)

单元测试的目的是测试你编写的代码。鉴于ArgumentNullException是您使用的API的一部分,测试是否根据您的期望行为是测试API而不是您的代码,只会浑水。

单元测试您对为您编写的代码编写的方法的所有行为进行了测试,因此就足够了。