BT

Rhino Mocks - Lambda Edition

by Al Tenhundfeld on Oct 07, 2008 |
Ayende Rahien recently released version 3.5 of Rhino Mocks, the popular .NET mocking framework. This version marks a major change in the API. A new Arrange, Act, Assert syntax, which utilizes Lamba Expressions and Extension Methods. These additions bring to Rhino Mocks many of the innovations of Moq, another .NET mocking framework gaining popularity.

Rhino Mocks 3.5 Example:
[Test]
public void WhenUserForgetPasswordWillSendNotification_UsingExpect()
{
var userRepository = MockRepository.GenerateStub<IUserRepository>();
var notificationSender = MockRepository.GenerateMock<INotificationSender>();

userRepository.Stub(x => x.GetUserById(5)).Return(new User { Id = 5, Name = "ayende" });
notificationSender.Expect(x => x.Send(null)).Constraints(Text.StartsWith("Changed"));

new LoginController(userRepository, notificationSender).ForgotMyPassword(5);

notificationSender.VerifyAllExpectations();
}
New features in version 3.5:
  • Arrange, Act, Assert model
  • Lambda and C# 3.0 extensions
  • Inline constraints
  • Support for mocking interface in C++ that mix native and managed types.
  • Allow a mock object to return to record mode without losing its expectations
  • CreateMock was deprecated in favor of StrictMock
  • Better error handling in edge cases.
  • Fixed an issue with mocking internal classes and interfaces
  • New event raising syntax

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

.NET 3.5 enhancements? lol by Eugene Tolmachev

All these features are *language* features of C# 3.0 (as correctly stated in the features quote, not .NET features, Al.

Re: .NET 3.5 enhancements? lol by Al Tenhundfeld

All these features are *language* features of C# 3.0 (as correctly stated in the features quote, not .NET features, Al.

Hi Eugene,


You are completely correct.


However, you'll notice I explicitly said .NET 3.5 language enhancements. Yes, it would have been more explicit for me to say, "C# 3.0 and VB.NET 9.0 language features," but it is extremely common to use the phrase .NET 3.5 language enhancements as a shorthand for new features common to the two primary .NET languages.



I purposefully did not refer to lambda expressions or extension methods as .NET features; that would be incorrect and stupid.


Thanks for your comment. I agree that specificity in terminology is important.

Re: .NET 3.5 enhancements? lol by Eugene Tolmachev

There reason I felt it warranted a comment is exactly in the fact that most people are not aware that you can use C# 3.0 even if you target 2.0 .NET framework. The distinction is important, because one might, for example, dismiss 3.5 RhinoMocks thinking that they can't use it if they are locked into .NET 2.0.

Re: .NET 3.5 enhancements? lol by Al Tenhundfeld

... most people are not aware that you can use C# 3.0 even if you target 2.0 .NET framework...one might, for example, dismiss 3.5 RhinoMocks thinking that they can't use it if they are locked into .NET 2.0.


Ah, that's a great point. Thanks for clarifying.

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

4 Discuss

Educational Content

General Feedback
Bugs
Advertising
Editorial
InfoQ.com and all content copyright © 2006-2014 C4Media Inc. InfoQ.com hosted at Contegix, the best ISP we've ever worked with.
Privacy policy
BT