System.Diagnostics.Debug.Assert(true) 是做什么的?

What does System.Diagnostics.Debug.Assert(true) do?

我在控制台应用程序中发现了以下代码,看起来有点奇怪:

System.Diagnostics.Debug.Assert(true);

它有什么作用?

如果你只是等待并阅读关于方法的评论,你就会知道答案

编辑

正如在评论部分指出的那样,如果操作员想知道为什么有人会使用这种方法,我认为是为了调试类似的东西,我想调试如果当我将 3 加到 1 时它将是 4,所以我会像这样使用它

Debug.Assert(3+1 == 4);

如果是四那么一切都很好但是如果不是四就会出现这样的消息框 这样会有更多有用的信息

正如 Gabe 所提到的,它并没有做太多:

In a DEBUG build, the method call will do nothing. In a release build the method call will not even be compiled into the program.

可能代码被错误地留在了那里。

看起来像金丝雀测试。

A canary test 是一个简单的测试,预计总能通过。它检查非常基本的东西,比如(在这种情况下),"did all my frameworks load correctly?" 如果那个断言曾经 失败 ,那么写它的人就知道他们的某个地方有严重的问题构建过程,在修复之前甚至查看任何其他错误都是没有意义的。

虽然这看起来很荒谬,但我看过介绍性的单元测试和 TDD 课程,明确地 教人们从 Assert(true) 金丝雀测试开始。有可能输入该代码的人只是按照他们被教导的方式去做

本声明是"no-op"所写。它什么都不做。这就像写作:

if (true) { }

就个人而言(我想大多数人都会同意),我发现这种性质的任何东西都没有价值,而且我认为它只会使代码混乱。我已经看到了这样的事情,并且思考了为什么我认为人们会这样做。一些程序员似乎使用脚本模式作为这种极端结果的指南,以至于产生了这样毫无意义的垃圾。有些管理层似乎对他们的员工缺乏信任,以至于他们实际上要求严格遵守这样的脚本模式!

对于您发布的空操作断言,可能是有人计划进行实际断言而忘记修复它。但也可能是参与开发过程的人对既定模式的依赖性很强,以至于他们看不出这种说法的无用性。他们可能只是坚持单元测试必须始终以至少一个断言结束的观点,即使没有什么可断言的。

如果是这样他们就错了。