This post originated from an RSS feed registered with Ruby Buzz
by Chad Fowler.
Original Post: Hidden Ruby Language Features
Feed Title: ChadFowler.com
Feed URL: http://feeds2.feedburner.com/Chadfowlercom
Feed Description: Best practices, worst practices, and some generally obvious stuff about programming.
Brian Marick writes about a little-known
feature of the Ruby language: the ability to automatically mock classes
for testing at runtime. There is a keyword called "mock" that you
can use to do it. For example, if you want to temporarily replace the
behavior of a class called MyDatabaseConnector for a test, you
would use the following code:
mock MyDatabaseConnector
class ClassToMockWith
..code...
end
Whatever class definition directly succeeds the invocation of
"mock" will be temporarily substituted for the class
specified as an argument to "mock". Specifically, in
this case, any references to MyDatabaseConnector will be replaced with
references to ClassToMockWith, so instantiating MyDatabaseConnector
actually instantiates ClassToMockWith, and so on.
Rubyists reading this are probably thinking I’ve lost my mind,
because this isn’t really a feature of the Ruby language. It’s
just a simple (albeit powerful) extension that Brian has written. But, to
someone coming from a history of work exclusively done in in one or more of
the more static languages (Java, C#, etc.), it looks like a first-class
part of the language.