On 9 Oct 2008, at 20:35, Hongli Lai wrote:

Pat Maddox wrote:
I've written [1] about using shared example groups to do this sort of
things.  You're already using them :)  but maybe you can still get
something out of that post.
What specifically don't you like about this solution?

What Matt proposed is very nice. :) I was struggling with finding a good way to name my specs.

ta! :)

However, by calling the shared example "a server" I can still end up with weird names:

 describe FrameworkSpawner
   describe "when in conservative spawning mode"
     before :each do
       ..
     end

     it_should_behave_like "an AbstractServer"
   end

   describe "when in smart spawning mode"
     before :each do
     end

     it_should_behave_like "an AbstractServer"
   end
 end

So I can end up with a weird sentence like:
"FrameworkSpawner when in smart spawning mode an AbstractServer raises AlreadyStarted if the child process is still running"

You're right, these do read funny don't they?

I still don't think you've got far enough along the implementation- >behavioiur spectrum in your example names and that's partly why it still feels weird. I'd rid of that reference to the AbstractServer altogether, for starters.

Don't forget that the name of the shared example group does not go into the specdoc - it's just a label you use when pulling it in with it_should_behave_like.

Maybe you could put another ExampleGroup block inside your shared group to describe the context?

e.g.: "FrameworkSpawner when in smart spawning mode when the child process is still running should raise an AlreadyStarted error"

Also bear in mind that you can split your shared behaviour and have more than one shared example group, and 'mix them in' to define the appropriate behaviour in different contexts.


Shared example groups *are* a blessing. Just the constructed sentences bother me sometimes. :) I'm also wondering whether it's a good idea to test my child classes like this, or whether I should test the parent class separately, and not test the child classes for the parent class's behaviors.
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to