MiniBar specification tutorial


import Specter.Framework

import Bender

context "At Bender's bar":

	_bar as duck #our subject is defined in the setup block below

	setup:
		subject _bar = Bender.MiniBar()

	#one-liner shorthand
	specify { _bar.DrinkOneBeer() }.Must.Not.Throw()

	specify "If I drink 5 beers then I owe 5 bucks":
		for i in range(5):
			_bar.DrinkOneBeer()
		_bar.Balance.Must.Equal(-5)

	specify "If I drink more than ten beers then I get drunk":
		for i in range(10):
			_bar.DrinkOneBeer()
		{ _bar.DrinkOneBeer() }.Must.Throw()

1) prepare an empty Bender namespace


Please note though we implement Bender namespace in Boo in this tutorial you can actually use C# or any .NET language of your choice.

Create a file named bender.boo with the following content :


		namespace Bender
		

Compile this into a library with booc -t:library bender.boo
This will produce bender.dll

2) compile the spec

Copy-paste the MiniBarSpec above in a file named MiniBarSpec.boo

Compile it with booc -r:bender.dll MiniBarSpec.boo
This will produce MiniBarSpec.exe

3) run the spec

execute MiniBarSpec.exe, you will get the following result :

result screenshot

3) add the MiniBar class into Bender namespace

Good! We have SubjectTypeNotFound errors since we have not implemented the MiniBar class yet.

Let's add the class in bender.boo :


		namespace Bender
		
		class MiniBar:
			pass
		

Recompile bender.dll again (booc -t:library bender.boo), then re-run the spec (re-compiling the spec is not required) : we'll get MissingMethod errors.

4) add the required method and property in the MiniBar class

Let's add the method and the property in bender.boo :


		namespace Bender
		
		class MiniBar:
			def DrinkOneBeer():
				pass
				
			[getter(Balance)]
			_balance = 0

		

Recompile bender.dll again, then re-run the spec, now that we have all the required members, we'll get this result :

result screenshot

Good! The first specify works the implementation still not matches the other two.

4) implement correctly the DrinkOneBeer method

Edit bender.boo again and implement method :


		namespace Bender
		
		class MiniBar:
			def DrinkOneBeer():
				_balance--
				if _balance < -10:
					raise System.Exception("i'm drunk")
				
			[getter(Balance)]
			_balance = 0

		

Recompile bender.dll again, then re-run the spec, now we'll get this result :

result screenshot

Sweet! We made it!

Want more ?

Look at the other documentation links on the homepage.