问题标签 [preconditions]

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 投票
2 回答
3907 浏览

c# - Pros/cons of different methods for testing preconditions?

Off the top of my head, I can think of 4 ways to check for null arguments:

I've always used the last method, but I just saw a code snippet that used Contract.Requires, which I'm unfamiliar with. What are the advantages/disadvantages of each method? Are there other ways?


In VS2010 w/ Resharper,

  • Contract.Assert warns me that the expression is always true (how it knows, I'm not quite sure... can't HttpContext be null?),
  • Contract.Requires gets faded out and it tells me the compiler won't invoke the method (I assume because of the former reason, it will never be null), and
  • if I change the last method to context != null all the code following gets faded out and it tells me the code is heuristically unreachable.

So, it seems the last 3 methods have some kind of intelligence built into the VS static checker, and Debug.Assert is just dumb.

0 投票
2 回答
157 浏览

code-contracts - 方法是否应该与它们调用的方法具有相同的前提条件?

我最近遇到了一些场景,其中对代码的微小更改导致跨多个类更改前提条件,我想知道按合同设计是否应该是这种方式。

如果goalStack.pop()有堆栈不为空的前提条件,那么是否getNextGoal()需要显式地具有相同的前提条件?似乎继承先决条件会使事情变得脆弱,而更改为队列或其他结构会将先决条件更改为getNextGoal(),它是调用者,它是调用者的调用者。但似乎不继承先决条件会隐藏合同,调用者和调用者的调用者不会知道先决条件。

如此脆弱的代码,所有调用者都知道并继承了他们调用的代码的前置条件和后置条件,或者调用者永远不知道更深层次的前置条件和后置条件是什么的神秘代码?

0 投票
4 回答
3381 浏览

.net - 检查 .NET 中的先决条件

我是“尽早失败”策略的粉丝,并且想检查方法参数是否具有正确的值。在 Java 中,我会使用Guava 之类的东西:

.NET 有类似的东西吗?

0 投票
3 回答
7831 浏览

java - 何时添加前提条件以及何时(仅)抛出异常?

我正在学习先决条件以及何时使用它们。我被告知前提条件

不适合以下代码:

为什么是这样?

编辑:另一个例子

作为示例,我们假设以下内容是以“正确”的方式完成的。请注意 IllegalArgumentException 和前提条件。请注意行为是如何定义良好的,以及即使设置了前提条件也是如何进行 throws 声明的。最重要的是,请注意它包含 NullPointerException 的先决条件。再说一遍,为什么不呢?

这些示例是否避免使用额外的先决条件?有人可能会争辩说,如果我们要避免先决条件,那为什么还要有它们呢?也就是说,为什么不用@throws 声明替换所有前提条件(如果避免它们是这里所做的)?

0 投票
1 回答
175 浏览

c# - C#中包装器的自动转换

我已经构建了旨在防止引用类型为空的包装类,作为前置条件代码合同。

这很好用,但总是需要像处理 Nullable 时一样:

是否可以让 NonNullable 类型的参数表现得好像它是 T 类型,而不必强制转换它?就像在 Spec# 中一样:

0 投票
2 回答
3118 浏览

java - 我可以使用 Junit 测试作为另一个 Junit 测试的前提条件吗

我有一个使用断言的 jUnit 测试(我们称之为 T1)。为了使该断言具有任何价值,我需要该断言正确的验证器。

对于验证器,我在另一个测试套件中有一个测试(T2)。我能以某种方式使 T2 成为 T1 的先决条件吗?

如果这不可能,如果 T1 和 T2 在同一个套件中,是否有可能?

0 投票
2 回答
1844 浏览

java - 检查范围前提条件

我喜欢番石榴前置条件,但我真正需要的是另一种方法 - 检查数字是否在范围内。像这样

我相信我并不孤单,这是一个很常见的案例。但是这样的方法是不存在的。有什么理由不把这些方法放进去com.google.common.base.Preconditions吗?

0 投票
2 回答
321 浏览

c# - 代码合同 1.4.40602.0 - Contract.ForAll 似乎不起作用?

Warning 1 CodeContracts: requires unproven: Contract.ForAll(coll, item => item != null) C:\MyApp\MyObj.cs

我意识到在旧版本的 CodeContractsContract.ForAll()中不支持该方法,但我认为现在(版本 1.4.40602.0)会支持吗?我只是在这里做错了什么还是仍然不受支持?

0 投票
1 回答
519 浏览

android-activity - 前提条件 UML?

我正在使用Agilian 3.2 构建一个小型活动图。该图包含几个动作。问题是:我想在图表的某处显示前提条件。是否有任何标准方法来定义 Agilian 中动作或活动图的先决条件?

0 投票
4 回答
1483 浏览

java - 一个适合生产使用的好断言类?Java 相当于 Groovy 的 PowerAssert?

我不喜欢 javaassert关键字,因为它并不总是在生产代码中启用。我正在寻找一个好的“ProductionAssert”类来使用,它总是运行提到的断言。

一个候选者是Guava 的先决条件。它很不错,但有点有限(例如,不,,,assertEquals())。assertNull()assertGreaterEquals()

一种选择是包括 jUnit 或另一个测试框架......但我不愿意仅仅为了一个简单的断言类而依赖整个测试框架。

如果我在 Groovy 中编程,我会使用PowerAssert

Java 是否有一个好的“ProductionAssert”类?

PS-一种选择是最终检查Java Contracts之类的东西……但是我现在正在寻找的是绝对最小的零摩擦,只需将其放入而无需对构建过程进行任何更改类。 .. 我不确定合同是否符合该描述。