我阅读了以对象为导向的软件,在史蒂夫·弗里曼(Steve Freeman)和纳特·普莱斯(Nat Pryce)的测试中,给人留下了深刻的印象。我想使用RSPEC在我的铁轨项目中采用这本书的想法,尽管其示例是用Java编写的。
本书的基本戒律是,我们应该嘲笑接口而不是 concrete类。他们说我们可以通过提取界面并命名它们来改进应用程序 design 。
但是,Ruby没有任何等同于Java的interface
的语法。我如何利用他们的技术来进行铁轨项目?
update
例如,在第126页中,作者引入了Auction
接口,以实现bid
方法。首先,他们嘲笑Auction.class
进行测试通行证,然后在Main
类中作为匿名内部类实现了Auction
类。最后,他们从Main
(第131-132页)提取了一个新的混凝土类XMPPAuction
。
我认为,这种增量方法是本书的症结。
如何在Ruby开发中采用或模仿此类代码转换?
查看以前的堆栈溢出答案,以很好地解释Ruby中的接口。
此外,Ruby中的实际面向对象的设计是一本类似于不断发展的对象软件书籍的书籍,但带有Ruby示例。值得检查。
由于在Ruby中,所有物体都是鸭型的,并且接口只是公开曝光的一组字段和方法,您可以做以下一个或多个:
test
设计测试以适当地测试界面和名称和注释您的测试 - 然后,您可以通过相同的测试套件将"接口"的所有"混凝土实现"传递给您的所有"具体实现"。只要您的测试套件涵盖了应用程序的边缘案例,您的应用程序中的任何内容都可以处理这些混凝土类的任何一个实例>
使用基础类
定义一个基类,您所有的混凝土类都将从所有方法丢弃NotImplemented
错误的位置继承。这为您提供了一个可以可视化的层次结构 - 但是,它确实需要额外的类,并可能鼓励您的生产代码中的许多is a
测试,而不是依赖has a
的代码。
您对Ruby没有正式接口的正确性。相反,接口是对象处理的消息中隐含的(请参阅鸭键入)。
如果您仍在寻找一种更正式的方法来"执行" Ruby中的接口,请考虑编写一套自动化的单元测试,如果对象正确符合界面,这些测试是绿色的,否则为红色。
有关示例,请参见ActiveModel :: Lint ::测试和RSPEC共享示例。