smalltalk - Pharo Smalltalk 测试失败,因为消息无法理解

标签 smalltalk pharo squeak pharo-5

我开始使用 Pharo 5 学习 Smalltalk。我现在正在关注 tutorial from the squeak guys正确掌握语法等。

我一开始只有两个类(一个BlankCell类和一个用于单元测试的BlanCellTestCase类)。 Blankcell 已经实现了一些消息,我在第 1.9 节的最后。

该行为得到了很好的实现,因为在 Playground 上:

| 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 ]

的参数

有人明白这里发生了什么吗?

最佳答案

TestCase>>assert: 需要一个 bool 值,而不是一个 block 。

所以

self 断言:[ exit = #south ]。

应该写成

self 断言:退出=#south

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

self 断言:退出等于:#south

因为这样你会看到字符串的差异,并且只是 bool 失败。

<小时/>

但是

Object>>assert: 需要一个 block ,而不是 bool 值。

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

关于smalltalk - Pharo Smalltalk 测试失败,因为消息无法理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43498666/

相关文章:

programming-languages - 寻找可以编写代码的编程语言 "in the debugger"

smalltalk - 我需要在字符和其他类型的对象之间进行类似字典的映射。哪个类最好?

oop - Erlang 中的进程/消息和 Smalltalk 中的对象/消息有什么区别?

version-control - Monticello:同步协作开发的工作流程/在复制到远程存储库时正确编号版本

smalltalk - 如何在 Squeak FFI 中引用外部全局变量

keyboard-shortcuts - 如何在 Pharo/Squeak 中缩进一段代码?

github - 将一个项目从 squeak smalltalk 上传到我的 github 帐户

smalltalk - 在测试中检查类的文本表示?

smalltalk - 从 OrderedCollection : 中选择以下项目的最优雅的方法是什么

file - 未指定路径时,Pharo 中默认保存的文件在哪里?