Maybe your email client messed up the link. It worked for me. Try this one: http://tinyurl.com/72p3fjp
--- Patrick Steele http://weblogs.asp.net/psteele 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.
