Pharo Smalltalk测试失败,因为消息未被理解
我开始学习Smalltalk,使用Pharo5。我现在遵循一个新的方法来正确掌握语法等 我刚开始的时候,我只有两个类(一个用于单元测试的BlankCell类和一个BlanCellTestCase类)。Blankcell已经实现了一些消息,我在第1.9节的末尾 beahavior实施得很好,因为在操场上: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
| 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: