Smalltalk和断言

Smalltalk和断言,smalltalk,assertions,gnu-smalltalk,Smalltalk,Assertions,Gnu Smalltalk,尝试一些smalltalk+TDD+“良好实践”我遇到了一个有点丑陋的障碍: 如何在GNU Smalltalk中进行断言 我只是在寻找一个简单的ifFalse:[Die]之类的东西这是assert:from的代码(我建议您使用它而不是GNU): 这很简单。在您的测试方法中,您编写: self assert: 1 + 1 = 2 但首先需要创建一个测试类作为TestCase的子类(在Squeak中),例如: TestCase subclass: #MyTest 您可以在这里编写测试方法,这些方

尝试一些smalltalk+TDD+“良好实践”我遇到了一个有点丑陋的障碍:

如何在GNU Smalltalk中进行断言


我只是在寻找一个简单的
ifFalse:[Die]
之类的东西

这是assert:from的代码(我建议您使用它而不是GNU):


这很简单。在您的测试方法中,您编写:

self assert: 1 + 1 = 2
但首先需要创建一个测试类作为TestCase的子类(在Squeak中),例如:

TestCase subclass: #MyTest
您可以在这里编写测试方法,这些方法的名称必须始终以“test”开头,例如:

testBasicArithmetics

self assert: 1 + 1 = 2
以及 自我断言:[……某个块]


适用于块和非块,因为将#值发送到对象会返回self。

上面有人建议将添加到
对象
,但我更愿意将添加到
块闭包
(或GNU Smalltalk中的任何
[]类

并因此在中使用

[ value notNil ] assert.
[ value > 0 ] assert.
[ list isEmpty not ] assert.

等等

你为什么不推荐GNU版本?缺乏支持-squeak有一个更具参与性的社区,加上squeak更有趣。更多的支持来自更多的用户。GNU Smalltalk的发展非常顺利。背后有很多人,保罗·邦齐尼是主要力量。别听那些死硬的尖叫声,他们只是多年没见过文件系统:)你可以从任何闲聊中得到乐趣。很明显,这样做报告了“矩阵不懂”#断言:。是的,当然,您需要创建一个测试类,并将断言放在测试方法中。请参阅我的更新。抱歉,这是一个误解:我不是指单元测试断言,而是按契约设计断言。(即,方法中的前/后条件检查。)为什么不在布尔值上使用方法<代码>(值>0)当然。我猜是因为测试可能会产生一个非布尔值或异常,尽管它似乎不像Smalltalk那样担心这一点。
assert
    this value ifFalse: [AssertionFailure signal: 'Assertion failed']
[ value notNil ] assert.
[ value > 0 ] assert.
[ list isEmpty not ] assert.