Let me see if I understand exactly what you want (ironically, I
learned RhinoMocks with the AAA syntax and I find it hard sometimes to
follow the record/play syntax).  The SearchManager class you're
testing has the following members:

ISearchDAO SearchDAO { get; set; }
IServiceAreaDAO ServiceAreaDAO { get; set; }
ArticleSearchResult SearchForArticles(ArticleSearchCriteria criteria,
int[] serviceAreaIds)

You want to ensure that the when calling SearchForArticles, the
results of any calls made to ServiceAreaDAO.GetById(int) are added to
the criteria.ServiceAreas collection?

-- 
Patrick Steele
http://weblogs.asp.net/psteele


On Mon, Nov 16, 2009 at 9:52 AM, Goatified Creature
<[email protected]> wrote:
>
> Hi, I have been trying to write a unit test in C# for a Manager
> method. I am mocking two DAOS. However, the parameter passed to the
> manager method will be further populated by the manager and passed as
> an argument to one DAO. I wish to place a constraint on the DAO call
> to ensure this property was populated correctly. Maybe this is easier
> to demonstrate through code....
>
> // the manager to test
>            SearchManager managerToTest = new SearchManager();
>
>            // mock the two DAOs
>            MockRepository mocks = new MockRepository();
>            ISearchDAO mockedSearchDAO = mocks.StrictMock<ISearchDAO>
> ();
>            IServiceAreaDAO mockedServiceAreaDAO =
> mocks.StrictMock<IServiceAreaDAO>();
>
>            // create a search criteria object that does not have it's
> ServiceAreas collection populated
>            ArticleSearchCriteria criteria = new ArticleSearchCriteria
> ();
>
>
>            // now the manager method will populate the ServiceAreas
> property of criteria with a collection of
>            // matching ServiceArea objects matching the below int
> array
>            int[] serviceAreaIds = { 345435 };
>            ServiceArea serviceArea = new ServiceArea();
>
>            // and these will be the pretend results
>            ArticleSearchResult resultFromDAO = new ArticleSearchResult
> ();
>
>
>            using (mocks.Record())
>            {
>                Expect.Call(mockedServiceAreaDAO.GetById
> (345435)).Return(serviceArea);
>
>
>                // Now, here, I want a contraint to say
>                // ensure criteria.ServiceAreas contains the above
> serviceArea object. This will be
>                // set before calling the below DAO method.
>                Expect.Call(mockedSearchDAO.SearchForArticles
> (criteria)).Return(resultFromDAO);
>
>            }
>            using (mocks.Playback())
>            {
>                // inject DAO dependencies
>                managerToTest.SearchDAO = mockedSearchDAO;
>                managerToTest.ServiceAreaDAO = mockedServiceAreaDAO;
>
>                // call the method ensuring correct results. This
> works fine
>                Assert.That(managerToTest.SearchForArticles(criteria,
> serviceAreaIds), Is.SameAs(resultFromDAO));
>
>
>                // Now, I shouldn't be validating the ServiceAreas
> collection was populated through the assert methodology
>                Assert.That(criteria.ServiceAreas, Has.Member
> (serviceArea));
>            }
>
>
> I have been tearing my receding hair out all afternoon through the
> Rhino Mocks documentation to understand how to test this scenario.
>
> Cheers!!!

--

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].
For more options, visit this group at 
http://groups.google.com/group/rhinomocks?hl=.


Reply via email to