Pharo Smalltalk测试失败,因为消息未被理解

Pharo Smalltalk测试失败,因为消息未被理解,smalltalk,pharo,squeak,pharo-5,Smalltalk,Pharo,Squeak,Pharo 5,我开始学习Smalltalk,使用Pharo5。我现在遵循一个新的方法来正确掌握语法等 我刚开始的时候,我只有两个类(一个用于单元测试的BlankCell类和一个BlanCellTestCase类)。Blankcell已经实现了一些消息,我在第1.9节的末尾 beahavior实施得很好,因为在操场上: | cell exit | cell := BlankCell new. exit := cell exitSideFor: #north. exit = #south "the last st

我开始学习Smalltalk,使用Pharo5。我现在遵循一个新的方法来正确掌握语法等

我刚开始的时候,我只有两个类(一个用于单元测试的BlankCell类和一个BlanCellTestCase类)。Blankcell已经实现了一些消息,我在第1.9节的末尾

beahavior实施得很好,因为在操场上:

| cell exit |
cell := BlankCell new.
exit := cell exitSideFor: #north.
exit = #south
"the last statement properly returns a true or false"
在testcase上有三个测试,只有一个失败(与exitSide相关):

错误消息是

MessageNotUnderstood:BlockClosure>>ifFalse:
doesNotUnderstand
消息被发送一个指向句子
[exit=#south]


有人知道这里可能发生了什么吗?

TestCase>>断言:
需要一个布尔值,而不是一个块

所以

自我断言:[退出=#南]。

应写为

self-assert:exit=#south

对于字符串比较,最好使用以下方法:

自我断言:退出等于:#南

因为这样,您将看到字符串的差异,而只是一个布尔失败


但是

对象>>断言:
需要一个块,而不是布尔值


但是,您可以在常规代码中使用此断言,而不是用于代码测试。

谢谢,本教程实际上使用了消息
should:
,它需要一个块。编译器建议改为使用assert,我没有注意到参数中的差异。
#south
是字节对象,因此没有实现
equals:
消息。(或者这取决于ST的实现?。@rll
#south
是一个
符号
;但为什么它需要理解
等于:
消息?整个消息是
assert:equals:
(带有两个参数)好的,我把它看作两条消息,因此产生了混淆。
MessageNotUnderstood:BlockClosure>>ifFalse: