2

我开始使用 Pharo 5 学习 Smalltalk。我现在正在按照squeak guy 的教程来正确掌握语法等。

我一开始,我只有两个类(一个用于单元测试的类 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 ]

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

4

1 回答 1

6

TestCase>>assert:需要一个布尔值,而不是一个块。

所以

self assert: [ exit = #south ].

应该写成

self assert: exit = #south

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

self assert: exit equals: #south

因为这样你会看到字符串的差异并且只是一个布尔失败。


Object>>assert:需要一个块,而不是布尔值。

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

于 2017-04-19T14:53:44.187 回答