【发布时间】:2011-11-17 03:02:14
【问题描述】:
我以为我了解 CodePro 的合同,但它们似乎没有任何作用。例如:
public class ContractTest {
private int number;
/**
* @pre inputNumber > 0
*
* Alternatively:
* @post number > 0
*/
public void setNumber(int inputNumber) {
number = inputNumber;
}
public int getNumber() {
return number;
}
public static void main(String args[]) {
ConditionsTest conditionsTest = new ConditionsTest();
conditionsTest.setNumber(-5);
System.out.println("Number: " + conditionsTest.getNumber());
}
}
运行 main(String[]) 方法导致:
number: -5
要打印。没有编译警告(预期),也没有抛出异常。此外,CodePro 生成的 junit 测试方法不受合约影响。
那么您如何使用 CodePro 的合约呢?
【问题讨论】:
-
不是你的问题的答案,但你知道你可以使用断言来实现同样的事情吗?参见例如 deitel.com/articles/java_tutorials/20060106/Assertions.html 最好的事情是断言是核心 java 的一部分。
-
断言是运行时,我希望合约是编译时。断言只会在代码运行时提醒程序员,而且通常不是程序的所有路径都可以测试。另外,如果 CodePro 合约类似于 cofaja 合约,那么这些合约可以被继承。
-
@Mowgli 对于大多数有趣的合约,基本上不可能(我会说无法确定,但我不是 100% 确定那里)在不运行实际代码的情况下确定条件是否成立。然后是输入的问题。因此,我无法想象有任何图书馆试图这样做,因为它只能在玩具示例中使用。 (严格来说并不正确,模型检查实际上与此有些相似)
-
我原以为它会类似于类型检查和静态分析。但我不知道,因为文档很少,我无法让它工作。
标签: java eclipse contracts codepro