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.