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.