问题标签 [assertions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
20 回答
64308 浏览

language-agnostic - 什么时候应该使用 Debug.Assert()?

我已经做了大约一年的专业软件工程师,毕业于 CS 学位。我知道 C++ 和 C 中的断言有一段时间了,但直到最近才知道它们存在于 C# 和 .NET 中。

我们的生产代码不包含任何断言,我的问题是......

我应该开始在我们的生产代码中使用断言吗?如果是这样,什么时候使用最合适?这样做会更有意义吗

或者

0 投票
3 回答
213 浏览

assertions - 性能断言检查系统的设计

对“性能断言检查”系统的设计有何看法?

这个想法是开发人员对他/她的代码做出一些断言,并使用这些断言来测试代码性能的演变。使用这样的系统是什么体验?

我当前的块是“将这些以指定语言编写的断言(将根据指定的日志或运行时工具进行检查)翻译成可以执行的 CLR 或程序集或字节码的更好方法是什么?”

目前我已经编写了一个解析器来解析规范并将其保存在数据结构中。

0 投票
7 回答
22830 浏览

tdd - 断言一个方法只被调用一次

我想断言一个方法只被调用一次。我正在使用 RhinoMocks 3.5。

这是我认为可行的方法:

GetMeMyThing()如果第二次调用调用,我希望此测试失败source.GetSomethingThatTakesALotOfResources()

0 投票
2 回答
3809 浏览

c# - C# 中的 SAML 断言 WriteXML 问题

我已经创建了一个 SamlAssertion 的实例,并向其中添加了授权声明和属性声明,现在我想打印出 XML,以便我可以进行 HTTP 发布,但并不是所有的断言都被输出。我错过了什么(我确定这是一些愚蠢的东西)?

这是我正在使用的代码:

但得到的只是这样的:

0 投票
5 回答
8145 浏览

c# - 你是如何扩展你的 Assert 类的

我喜欢将我的 Assert.AreEqual 扩展到许多不同的类,已知的当然是 CollectionAssert,但我可以想到更多,例如:ImageAssert、 XmlAssert 等。

您是否创建了自己的 Assert 类?你想创造什么样的新事物?

0 投票
11 回答
4550 浏览

c++ - 断言总是不好的吗?

我曾经在一家公司工作,那里的一些首席架构师/开发人员已在各种项目中强制要求不得使用断言,并且它们通常会从代码中删除并替换为异常。

我觉得它们对于编写正确的代码非常重要。任何人都可以建议如何证明这样的授权是合理的吗?如果是这样,断言有什么问题?

0 投票
8 回答
3831 浏览

.net - Debug.Assert 与异常

令人惊讶的是,我只能找到关于这个主题的一个关于 SO 的先前问题,我只想让社区对我的方法进行“信任投票”(或不投票!)。

我的看法是这样的:

  • 用来Debug.Assert陈述你期望是真的事情。这将在我们完全控制我们的环境时使用,例如在验证某些前置条件和后置条件的方法中。
  • 出现异常情况时使用异常。处理外部资源,即文件、数据库、网络等是轻而易举的事。但...

在以下场景中它变得有点模糊。请注意,这是一个人为的示例,仅用于说明!

假设我们有一个 MyClass 类,它有一个公共属性 MyMode 和一个方法GetSomeValueForCurrentMode()。将 MyClass 视为一个打算在库中交付(发布构建)以供其他开发人员使用的类。

我们希望 MyMode 由此类的外部用户更新。现在,GetSomeValueForCurrentMode()有以下逻辑:

我在这里得到的是 MyClass 的用户已将其置于无效状态。那么我们应该怎么做呢?

默认情况下,我们应该Debug.Assert还是throw new InvalidOperationException(或其他)?

有一个口头禅说我们不应该信任我们课程的用户。如果我们选择 Debug.Assert 并将 MyClass 构建为发布版本(从而删除 Debug Asserts),则该类的用户将不会获得他们将其置于无效状态的有用信息。但这有点与另一个口头禅相反,后者说只有在完全无法控制的事情发生时才抛出异常。

我发现我在这个圈子里转了一圈 - 那些似乎没有明确的“正确”答案的编程辩论之一。所以让我们把它付诸表决吧!

编辑:我在一个相关的 SO 问题中注意到了这个响应(使用断言或异常进行合同设计?):

经验法则是,当你试图捕捉自己的错误时,你应该使用断言,而当你试图捕捉别人的错误时,你应该使用异常。换句话说,您应该使用异常来检查公共 API 函数的先决条件,以及每当您获得系统外部的任何数据时。您应该对系统内部的功能或数据使用断言。

对我来说,这是有道理的,并且可以与下面概述的“断言然后抛出”技术相结合。

欢迎提出想法!

0 投票
2 回答
7071 浏览

debugging - 如何在 VC++ 6 中调试“调试断言失败”

我想知道如何调试以下错误:

我对使用 VC++ 6 进行 Windows 开发很陌生……有 valgrind 或类似的东西吗?tomtoprog 代码不是我写的,而且相当混乱......所以像 valgrind 这样的东西会让我的生活更轻松......

提前致谢!

最好的祝福,

正补品

0 投票
2 回答
268 浏览

.net - 是什么让 CLR 显示断言?

如果我在 Visual Studio 中为我的 C# 项目定义 Debug 常量,我可以确定断言将被评估,并且当它们失败时会显示一个消息框。但是什么标志、属性使 CLR 在运行时实际决定是否评估和显示断言。定义 DEBUG 时,断言代码是否不会在 IL 中结束?还是程序集的 DebuggableAttribute 中的DebuggableAttribute.DebuggingModes标志是关键?如果是这样,它必须存在什么枚举值?这在引擎盖下是如何工作的?

0 投票
3 回答
2452 浏览

apache-flex - 为什么 FlexUnit 中没有 assertError() 函数?

似乎大多数 XUnit 测试框架在您想要断言给定操作将引发异常(或 AS3 术语中的错误)时提供断言。是否有一些我忽略的“标准”方法来执行此操作,其中可以解释 FlexUnit 中缺少 assertError() 断言吗?

我知道如何实现这样的事情,我可能会将它添加到我的 FlexUnit(去开源!),但这似乎是一个明显的遗漏,我不知道我是否只是做错了。

有人对此有想法吗?