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, 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 
> > 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.

Reply via email to