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, packageManifest.Title);
> >> > etc...
>
> >> > ---
> >> > Patrick Steelehttp://weblogs.asp.net/psteele
>
> >> > On Thu, Nov 10, 2011 at 10:39 AM, Laksh <[email protected]> wrote:
> >> > > GetData method gets the data from the database and then I assign the
> >> > > data to Package class hierarchy.
> >> > > I'm creating the instance of Package inside the method. So how Rhino
> >> > > will test such things. My question was not only for this method. In
> >> > > general it is very common we create instances of custom classes, .Net
> >> > > classes inside the method. (Basically local variables). In such case
> >> > > how do test the method using Rhino?
>
> >> > > On Nov 9, 10:33 am, Patrick Steele <[email protected]> wrote:
> >> > >> What does GetData do? You probably need to stub that out, but
> >> > >> without
> >> > >> knowing what it does, I can't say for sure.
>
> >> > >> ---
> >> > >> Patrick Steelehttp://weblogs.asp.net/psteele
>
> >> > >> On Wed, Nov 9, 2011 at 11:20 AM, Laksh <[email protected]> wrote:
> >> > >> > I have the following method. I'm creating a instance of Package
> >> > >> > class
> >> > >> > inside the method, setting some of its proeprties and then
> >> > >> > returning
> >> > >> > it. How do i unit test this method using Rhino?
>
> >> > >> > public class Manifest : IManifest<Package>
> >> > >> > {
> >> > >> > private IContext _context = null;
>
> >> > >> > publicManifest(IContext context)
> >> > >> > {
>
> >> > >> > _context = context;
> >> > >> > }
>
> >> > >> > public Package BuildManifest()
> >> > >> > {
> >> > >> > // Data object is class which holds the data from
> >> > >> > datasource.
> >> > >> > DataObject data = GetData(_context);
>
> >> > >> > Package package = new Package();
> >> > >> > package.BatchID = data.BatchId;
> >> > >> > package.Title = data.Title;
> >> > >> > package.Name = data.Name;
> >> > >> > package.City = data.City;
>
> >> > >> > IList<PackageDocument> documents = new
> >> > >> > List<PackageDocument>();
> >> > >> > foreach (Document document in data.ConvertedDocuments)
> >> > >> > {
> >> > >> > PackageDocument packageDocument = new
> >> > >> > PackageDocument();
> >> > >> > packageDocument.FileName = document.DocumentName;
> >> > >> > packageDocument.PrintOrder =
> >> > >> > document.SequenceNumber.Value;
> >> > >> > packageDocument.PaperType =
> >> > >> > PackageDocumentPaperType.White;
> >> > >> > documents.Add(packageDocument);
> >> > >> > }
> >> > >> > package.Documents = documents.ToArray();
> >> > >> > return package;
> >> > >> > }
> >> > >> > }
>
> >> > >> > --
> >> > >> > 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
> >> > >> > athttp://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
> >> > > athttp://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.
>
> > --
> > 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.