生产代码中的NUnit断言

Nat*_*nar 3 c# asp.net testing nunit

我试图找到在生产代码中包含断言的最佳实践,但我对所发现的信息很少感到惊讶。

首先,在生产代码中是否有断言通常是否可以接受?

其次,我读到内置的.NET Debug.Assert实际上会自动禁用其生产代码,并且实际上只能在开发环境中运行。那是真的,NUnit也内置了此功能吗?

例如,如果我在生产代码中具有以下内容,则断言会被忽略吗?

var sortedActuals = actuals.OrderByDescending(a =>
                    {
                        Assert.That(a.GLPeriodDateTime, Is.Not.Null, "GLPeriodDateTime was null when it should not be");
                        return a.GLPeriodDateTime.Value;
                    })
Run Code Online (Sandbox Code Playgroud)

Cha*_*lie 5

NUnit断言必须在发布版本中起作用,因为发布版本必须经过测试。出于多种原因,您不应在生产代码中包括NUnit断言。

  1. NUnit的断言(以及Debug.Assert的)旨在检测问题代码。提供给您的应用程序的错误数据是正常应用程序流程的一部分,应该由生产代码进行检测和处理。

  2. 这些断言旨在在NUnit的控制下运行,NUnit知道结果的含义。例如,某些断言在失败时引发异常,而另一些则不会。您将需要知道差异才能有效地利用它。

  3. 还有其他处理不良数据的完善方法,包括异常处理,自定义错误消息等。

  4. 最有可能的是,您尝试将NUnit约束语法与NUnit测试分开使用。这是一个很好的语法,一些人要求我们将其拆分为一个单独的程序包。如果我们这样做了,您可以使用它,但是不幸的是我们还没有。