Сбой теста Pharo Smalltalk, потому что сообщение не понято
Я начинаю изучать Smalltalk, используя Pharo 5. Теперь я следую учебному пособию от скрипучих парней, чтобы лучше понять синтаксис и т. Д.
Я в начале, у меня есть только два класса (класс 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 ]
Кто-нибудь понимает, что здесь может происходить?
1 ответ
TestCase>>assert:
ожидает логическое значение, а не блок.
Так
self assert: [ exit = #south ].
должно быть написано как
self assert: exit = #south
Для сравнения строк предпочтительным способом является использование следующего:
self assert: exit equals: #south
Потому что таким образом вы увидите разницу строк и просто логический сбой.
НО
Object>>assert:
ожидает блок, а не логическое значение.
Однако вы должны использовать это утверждение в своем обычном коде, а не для тестирования кода.