Testing (Mis)理解Smalltalk和TDD
我试图通过实践来学习Smalltalk,因此我通过构建一个简单的“Matrix”类来掌握语法和样式 首先,如果能链接到一个好的Smalltak教程(尽管这是完全可选的),我将不胜感激,最好是一个不涉及使用GUI的教程(我宁愿键入我的Testing (Mis)理解Smalltalk和TDD,testing,syntax,tdd,smalltalk,Testing,Syntax,Tdd,Smalltalk,我试图通过实践来学习Smalltalk,因此我通过构建一个简单的“Matrix”类来掌握语法和样式 首先,如果能链接到一个好的Smalltak教程(尽管这是完全可选的),我将不胜感激,最好是一个不涉及使用GUI的教程(我宁愿键入我的.sts,而不是在层次结构资源管理器中查找方法来代替它们) 然后,在TDD上:对于这个项目,我要调用gst sunit-f matrix.st-f matrix-test.st BaseMatrixTests,肯定有更好的方法有吗? 最后,关于断言:我试图编写一个方法
.st
s,而不是在层次结构资源管理器中查找方法来代替它们)
然后,在TDD上:对于这个项目,我要调用gst sunit-f matrix.st-f matrix-test.st BaseMatrixTests
,肯定有更好的方法有吗?
最后,关于断言:我试图编写一个方法并将断言放入其中,例如:
Matrix>>multiplyBy: anotherMatrix [
[ self isNotEmpty ] assert.
"Do Multiplication"
[ result dimensions = (self height)@(anotherMatrix width) ] assert.
]
我如何做这种断言?
编辑:明确标记问题。除了要求提供教程之外,我在这里没有看到任何问题。你能澄清一下你想知道什么吗 在这个问题中可以找到一个适合初学者的资源列表:我不想这么说('因为你明确表示你不想听到它),但是进入IDE。试图在不使用IDE的情况下了解smalltalk就像去巴黎和麦当劳吃饭一样。当然,你现在在巴黎,但你并没有真正了解这一切
smalltalk的关键在于它都是对象。从头到尾(整数和字符都是对象),从头到尾(类、方法、浏览器、IDE本身)都是对象。如果你坚持与之抗争,你的运气将与那些想通过拖放东西来学习如何编写C语言的人一样好。好的,这里有几段 首先,我同意markusQ,尽管我完全赞同:我宁愿能够直接用EMACS编写代码。Smalltalk的一个特点是,对于那些不想用Smalltalk的方式做事的人来说,它真的是非常不可原谅的。在这种情况下,Smalltalk的方式是使用浏览器 其次,这是Smalltalk方式的部分原因是Smalltalk在很多方面与其他语言不同。实际上,出于所有实际目的,没有办法制作一个“单独的”Smalltalk可执行文件:您所能做的只是制作一个Smalltalk的图像,并添加一些您自己代码的相对较小的片段。当您使用外部编辑器编写代码时,正如您所展示的语法一样,您实际上只是手工键入一种导入/导出格式,这种格式比XML更容易手工键入。但只是有点 其寓意是,用Smalltalk的方式使用浏览器 Smalltalk有一些相当不错的教程。我通常使用Squeak,所以我见过的人都使用Squeak,如图所示 在TDD上,你很幸运,因为Smalltalk是第一个得到xUnit的地方。对于Smalltalk,它被称为SUnit,并且有一个很好的教程 您使用的断言基本上是一种“契约式设计”方法。在Smalltalk中增加合同设计的工作已经完成,如下所示。对于简单的断言,可以添加代码,如中所示
如果您下载了Cincom Smalltalk非商业版,则有许多在线教程。从这里开始: 如果您下载了Squeak,请从这里开始: 是的,您确实需要使用IDE来有效地处理Smalltalk
assert
this value ifFalse: [AssertionFailure signal: 'Assertion failed']
测试时,加载SUnit。在Cincom Smalltalk中,它是一个可加载组件;我已经在上面链接的视频教程中介绍了加载(和使用)它。我不完全确定如何为Squeak加载它,或者它是否是那里的基础的一部分,但它肯定是可用的。因此,关于断言,Squeak Smalltalk已经带来了Object>>断言: 所以,我想你可以做到:
self assert: self isNotEmpty.
self assert: result dimensions equal: (self height)@(anotherMatrix width)
如果您正在使用GNU smalltalk,这可能会回答如何在那里进行断言:
Niko介绍了Smalltalk面向消息编程的要点关于断言,请查看最近发布的另一个问题 关于TDD,是的,调用
gst sunit-f matrix.st-f matrix-test.st BaseMatrixTests
是最好的方法。其他一切都建立在这一基础上,例如,这些可能是电子替代品:
- 使包的所有TestCase子类继承自一个虚假的子类,这样您就可以在gst sunit的命令行上说
(当您添加更多测试时)AllMatrixTests*
- 文件位于matrix-test.st的matrix.st中,从而消除了一个-f选项
- 创建Makefile和package.xml文件,以便为包创建.star文件,如所述。然后您就可以执行gst sunit-pMatrix
#断言:
添加到对象
,但我更愿意将#断言
添加到块闭包
(或者GNU Smalltalk中的任何[]类
)
并因此在中使用
[ value notNil ] assert.
[ value > 0 ] assert.
[ list isEmpty not ] assert.
等等 (您还可以找到下载pdf的链接)
我宁愿键入我的.sts,也不愿在层次结构资源管理器中搜索以将方法放在适当的位置)
你现在这么说,我也有同样的感觉,直到我花了一些时间学习如何使用这些工具
我作为Vim的当前用户和Emacs的前用户这样说。现在我已经学会了诀窍,在Pharo中使用类浏览器和其他工具真的变得非常高效
话虽如此,如果你真的想走自己的路,GNU Smalltalk是你的正确选择
我想在这一点上指出,虽然至少Pharo有一个矩阵类,您可以使用它来获得灵感。Squeak也应该这样。也许您将了解到类浏览器在检查矩阵时是多么有用。;)
[ value notNil ] assert.
[ value > 0 ] assert.
[ list isEmpty not ] assert.