The mailing list has truncated the link. Try the initial blog post instead here http://jonkruger.com/blog/2010/03/12/how-to-use-rhino-mocks-documented-through-tests/
Yes, its for 3.5, but the changes betw 3.5 and 3.6 are pretty minor. Steve Bohlen [email protected] http://blog.unhandled-exceptions.com http://twitter.com/sbohlen On Fri, Nov 18, 2011 at 4:43 PM, Laksh <[email protected]> wrote: > that link doesnt work..and also just to be sure i'm using version > 3.6.0.0 > > On Nov 18, 3:29 pm, Stephen Bohlen <[email protected]> wrote: > > I always recommend people take a look at this for referencehttps:// > raw.github.com/JonKruger/RhinoMocksExamples/master/src/RhinoM... > > its (reasonably) up-to-date and is also (reasonably) comprehensive. > > > > Steve Bohlen > > [email protected]http://blog.unhandled-exceptions.comhttp:// > twitter.com/sbohlen > > > > > > > > On Fri, Nov 18, 2011 at 3:53 PM, Laksh <[email protected]> wrote: > > > Thank you very much. Is there any documentation/ examples on how to do > > > this stuff. I was using this pdf at > > > > >http://ayende.com/wiki/GetFile.aspx?File=Rhino+Mocks+3.3+Quick+Refere. > .. > > > but its not comprehensive. > > > > > Also on the same topic, How do i test for each loop below? > > > > > public void DoWork(UserDocumentPackage userDocumentPackage) > > > { > > > var packageDetails = > > > userDocumentPackage.GetPackageDetails(); > > > if (packageDetails != null) > > > { > > > IList<PackageDocument> documents = new > > > List<PackageDocument>(); > > > foreach (UserDocumentPackageDetail packageDetail in > > > packageDetails) > > > { > > > PackageDocument packageDocument = new > > > PackageDocument(); > > > packageDocument.FileName = > > > packageDetail.GetUserDocumentNameWithNewExtension(".pdf"); > > > packageDocument.PrintOrder = > > > packageDetail.SequenceNumber; > > > packageDocument.PaperType = > > > DocumentPaperType.White; > > > packageDocument.OverlayText = "some text"; > > > packageDocument.OverlayTextAngle = 45; > > > packageDocument.ImageReduction = 10; > > > packageDocument.Duplex = true; > > > documents.Add(packageDocument); > > > } > > > package.Documents = documents.ToArray(); > > > } > > > } > > > On Nov 11, 3:47 am, Gavin van der Merwe <[email protected]> > > > wrote: > > > > Furthermore if you wanted to mock something like > > > > HttpContext.Current.Server.MapPath(.NET Classes/Types) you would > have to > > > > wrap it in a class and make the member that does this work virtual .. > > > > > > public interface IHttpContextService > > > > > > { > > > > > > string MapPath(string webUrl); > > > > > > } > > > > > > public class HttpContextService : IHttpContextService > > > > > > { > > > > > > public string MapPath(string webUrl) > > > > > > { > > > > > > return HttpContext.Current.Server.MapPath(webUrl); > > > > > > } > > > > > > } > > > > > > public class ThingWhatUsesMapPath > > > > > > { > > > > > > private readonly IHttpContextService contextService; > > > > > > public ThingWhatUsesMapPath(IHttpContextService > contextService) > > > > > > { > > > > > > this.contextService = contextService; > > > > > > } > > > > > > public string ThingWhatDoesStuff(string mapIt) > > > > > > { > > > > > > return contextService.MapPath(mapIt); > > > > > > } > > > > > > } > > > > > > [TestFixture] > > > > > > public class ThingWhatUsesMapPathTests > > > > > > { > > > > > > [Test] > > > > > > public void ThingWhatDoesStuff_should_MapPath() > > > > > > { > > > > > > var fakeContextService = MockRepository.GenerateStub< > > > > IHttpContextService>(); > > > > > > var objectUnderTest = new ThingWhatUsesMapPath > > > > (fakeContextService); > > > > > > objectUnderTest.ThingWhatDoesStuff("AnyPath"); > > > > > > fakeContextService.AssertWasCalled(x => > x.MapPath(Arg<string > > > > > > >.Is.Equal("AnyPath"))); > > > > > > } > > > > > > } > > > > > > On 10 November 2011 23:33, Stephen Bohlen <[email protected]> wrote: > > > > > > > Only if the methods in the concrete class are declared virtual. > The > > > two > > > > > kinds of things that can be mocked with RhinoMocks are: > > > > > > > 1) interfaces > > > > > 2) virtual methods in unsealed classes > > > > > > > Steve Bohlen > > > > > [email protected] > > > > >http://blog.unhandled-exceptions.com > > > > >http://twitter.com/sbohlen > > > > > > > On Thu, Nov 10, 2011 at 6:10 PM, Laksh <[email protected]> wrote: > > > > > > >> correct..but not all the classes in .Net or my custom classes are > > > > >> sealed. You are saying if the class is not sealed, i can mock it > > > > >> without having the interface? > > > > > > >> On Nov 10, 3:27 pm, Patrick Steele <[email protected]> > wrote: > > > > >> > Mocking an interface is easier. You can mock the virtual > members > > > of a > > > > >> > non-sealed class. If a class is sealed or the members you want > to > > > > >> > mock are not virtual, you'll have to create a wrapper (possibly > in > > > the > > > > >> > form of an interface) in order to do your mocking. > > > > > > >> > --- > > > > >> > Patrick Steelehttp://weblogs.asp.net/psteele > > > > > > >> > On Thu, Nov 10, 2011 at 3:07 PM, Laksh <[email protected]> > wrote: > > > > >> > > Thanks. > > > > >> > > I'm new rhino mocks and never used it before..so the > questions. > > > > >> > > One last question. Is it necessary to derive all the classes > from > > > some > > > > >> > > kind of interface? How do we mock .Net classes? > > > > >> > > for example > > > > >> > > MockRepository mocks = new MockRepository(); > > > > >> > > var myClass = mocks.Stub<MyClass>(); > > > > >> > > var list = mocks.DynamicMock<Array>(); > > > > > > >> > > On Nov 10, 11:51 am, Patrick Steele <[email protected] > > > > > wrote: > > > > >> > >> Correct. Mocking only works if you control creation of the > > > object. > > > > > > >> > >> --- > > > > >> > >> Patrick Steelehttp://weblogs.asp.net/psteele > > > > > > >> > >> On Thu, Nov 10, 2011 at 12:41 PM, Gavin van der Merwe > > > > > > >> > >> <[email protected]> wrote: > > > > >> > >> > I think Patrick is saying that mocking MyClass this way is > not > > > > >> possible. > > > > >> > >> > You need to structure your class in a de-coupled way ... > > > > >> > >> > public class ClassThatDoesWork > > > > >> > >> > { > > > > >> > >> > private MyClass instance; > > > > >> > >> > public ClassThatDoesWork(MyClass instance) > > > > >> > >> > { > > > > >> > >> > this.instance = instance; > > > > >> > >> > } > > > > >> > >> > public void DoWork(someInputParameters) > > > > >> > >> > { > > > > >> > >> > // do stuff with mocked instance > > > > >> > >> > } > > > > >> > >> > } > > > > > > >> > >> > On 10 November 2011 17:31, Laksh <[email protected]> wrote: > > > > > > >> > >> >> Thanks, i'll would do that, and we are using Repository > > > pattern, > > > > >> so > > > > >> > >> >> its easy change. > > > > > > >> > >> >> i have a question though. In my scenario the method > returns > > > the > > > > >> > >> >> Package class so the caller of this method knows Package > > > class.so > > > > >> i'm > > > > >> > >> >> able to Assert the values. > > > > >> > >> >> If i have a method which internally creates instance of > class, > > > > >> would > > > > >> > >> >> it be possible to mock that class. see the example below > > > > > > >> > >> >> public void DoWork(someInputParameters) > > > > >> > >> >> { > > > > >> > >> >> MyClass instance = new MyClass() > > > > >> > >> >> // do some logic here. > > > > >> > >> >> // I may use some .Net classes also to perform the > logic > > > > >> > >> >> } > > > > > > >> > >> >> is it possible to mock MyClass & .Net classes here ? > > > > > > >> > >> >> On Nov 10, 10:18 am, Patrick Steele < > [email protected] > > > > > > >> wrote: > > > > >> > >> >> > You want to make sure you have a loosely coupled > > > architecture > > > > >> so you > > > > >> > >> >> > can do your unit tests in isolation. > > > > > > >> > >> >> > The Manifest class you originally showed looks like it > > > needs to > > > > >> get > > > > >> > >> >> > data from a database (The GetData method). That > dependency > > > on a > > > > >> > >> >> > database should be in a different component. One idea > is to > > > > >> create a > > > > >> > >> >> > repository interface for accessing the data: > > > > > > >> > >> >> > interface IDataObjectRepository > > > > >> > >> >> > { > > > > >> > >> >> > DataObject GetData(IContext); > > > > > > >> > >> >> > } > > > > > > >> > >> >> > Your Manifest class now has a dependency on the > > > > >> IDataObjectRepository > > > > >> > >> >> > which can be mocked at test time using Rhino.Mocks. > This > > > way > > > > >> you > > > > >> > >> >> > don't have to have an actual database up and running to > > > execute > > > > >> your > > > > >> > >> >> > unit test for BuildManifest(). You don't have to worry > > > about > > > > >> proper > > > > >> > >> >> > table structures and things like that. > > > > > > >> > >> >> > So iyour Manifest class now takes in the repository: > > > > > > >> > >> >> > public class Manifest : IManifest<Package> > > > > >> > >> >> > { > > > > >> > >> >> > private IContext _context = null; > > > > >> > >> >> > private IDataObjectReposutory _repository = > null; > > > > > > >> > >> >> > public Manifest(IContext context, > > > IDataObjectReposutory > > > > >> > >> >> > repository) > > > > >> > >> >> > { > > > > >> > >> >> > _context = context; > > > > >> > >> >> > _repository = repository; > > > > >> > >> >> > } > > > > > > >> > >> >> > public Package BuildManifest() > > > > >> > >> >> > { > > > > >> > >> >> > ... > > > > >> > >> >> > DataObject data = > > > _repository.GetData(_context); > > > > >> > >> >> > ... > > > > >> > >> >> > } > > > > > > >> > >> >> > } > > > > > > >> > >> >> > Now you can mock your context and repository and test to > > > make > > > > >> sure > > > > >> > >> >> > that your Package gets built properly based on the data > > > > >> returned by > > > > >> > >> >> > IDataObjectRepository.GetData(): > > > > > > >> > >> >> > // arrange > > > > >> > >> >> > var context = MockRepository.GenerateStub<IContext>(); > > > > >> > >> >> > var repository = > > > > >> MockRepository.GenerateStub<IDataObjectRespository>(); > > > > >> > >> >> > var do = new new DataObject { BatchID = "100", > Title="Test" > > > }; > > > > >> > >> >> > repository.Stub(r => r.GetData(context)).Returns(do); > > > > > > >> > >> >> > // act > > > > >> > >> >> > var manifest = new Manifest(context, repository); > > > > >> > >> >> > var pacakgeManifest = manifest.BuildManifest(); > > > > > > >> > >> >> > // assert > > > > >> > >> >> > Assert.AreEqual(do.BatchID, packageManifest.BatchID); > > > > >> > >> >> > Assert.AreEqual(do.Title, > > > > ... > > > > read more ยป- Hide quoted text - > > > > - Show quoted text - > > -- > You received this message because you are subscribed to the Google Groups > "Rhino.Mocks" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/rhinomocks?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Rhino.Mocks" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rhinomocks?hl=en.
