我开始学习Smalltalk,使用Pharo 5.我现在正在关注tutorial from the squeak guys以正确掌握语法等。
我在开头,我只有两个类(一个类BlankCell和一个BlanCellTestCase类用于单元测试)。 Blankcell已经实现了一些消息,我在第1.9节的最后。
行为很好,因为在操场上:
| cell exit |
cell := BlankCell new.
exit := cell exitSideFor: #north.
exit = #south
"the last statement properly returns a true or false"
在测试用例上有三个测试,只有一个测试失败(与exitSide相关):
testCellExitSides
"Test the exit sides."
| cell exit |
cell := BlankCell new.
exit := cell exitSideFor: #north.
self assert: [ exit = #south ].
exit := cell exitSideFor: #east.
self assert: [ exit = #west ].
exit := cell exitSideFor: #south.
self assert: [ exit = #north ].
exit := cell exitSideFor: #west.
self assert: [ exit = #east ].
错误消息是
MessageNotUnderstood:BlockClosure>>ifFalse:
doesNotUnderstand
消息被发送一个指向句子[ exit = #south ]
有谁知道这里会发生什么?
答案 0 :(得分:6)
TestCase>>assert:
需要布尔值,而不是块。
所以
self assert: [ exit = #south ].
应该写成
self assert: exit = #south
对于字符串比较,最好的方法是使用以下内容:
self assert: exit equals: #south
因为这样你会看到字符串的差异而只是一个布尔故障。
<强> BUT 强>
Object>>assert:
需要一个块,而不是布尔值。
但是,您可以在常规代码中使用此断言,而不是代码测试。