Сбой теста 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: ожидает блок, а не логическое значение.

Однако вы должны использовать это утверждение в своем обычном коде, а не для тестирования кода.

Другие вопросы по тегам