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 Steele
http://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 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.