No, that's pretty much the same behavior I'm expecting and getting as
well.  The only difference between that and how my code runs is that
the SortedList is getting populated elsewhere in the code, but when I
place a watch on the sorted list object and step through the code, I
watch it getting correctly populated before the AddNewJobQueueRow
call.  At this point, there's little value for me in pursuing this
further because I have a unit test that works and ensures the behavior
of my method, I just had a hard time wrapping my head around the
differences between .Stub and .Expect versions and why one passes and
one doesn't.  You've answered most of my questions, and I really
appreciate your time.

On May 2, 3:51 pm, Patrick Steele <[email protected]> wrote:
> Hmmm....  I just did a test with the following code and it worked fine:
>
> public interface IJobQueue
> {
>         void AddNewJobQueueRow(int jobNumber, SortedList jobParameter);
>
> }
>
> public class MainProcessing
> {
>         public void CreateJobQueueForCustomer(IJobQueue jobQueue)
>         {
>                 int jobNumber = 4;
>                 var jobParameter = new SortedList { { "PKEY", "50" } };
>
>                 jobQueue.AddNewJobQueueRow(jobNumber, jobParameter);
>         }
>
> }
>
> [TestMethod]
> public void JobQueueStuff()
> {
>         var stubbedJobQueue = MockRepository.GenerateStub<IJobQueue>();
>
>         var mainProcessing = new MainProcessing();
>         mainProcessing.CreateJobQueueForCustomer(stubbedJobQueue);
>
>         stubbedJobQueue.AssertWasCalled(x =>
>                 x.AddNewJobQueueRow(Arg<int>.Matches(i => i.Equals(4)),
>                         Arg<SortedList>.Matches(list => 
> list.ContainsKey("PKEY") &&
>                                 list.ContainsValue("50"))));          
>
> }
>
> This test passed.  If I changed my implementation of
> CreateJobQueueForCustomer to build the SortedList with something other
> than PKEY or a value of "50", the test would fail (as expected).
>
> Can you see what I'm doing differently than your code?
>
> ---
> Patrick Steelehttp://weblogs.asp.net/psteele
>
> On Fri, Apr 30, 2010 at 2:16 PM, NateGQG <[email protected]> wrote:
> > This is not code that I'm the owner of, so unfortunately I can't share
> > that with you, but this is a simplified version of the
> > CreateJobQueueForCustomer method.  The jobNumber is actually getting
> > set as a setting in the config file, but I can't include that or the
> > name of the file.  I also can't share the code I'm using to populate
> > the jobParameter list, but I've stepped through the code and the key/
> > value pair is correctly being populated before the call to
> > AddNewJobQueueRow. I figured a good way to test the behavior of the
> > CreateJobQueueForCustomer method wouId be to grab the values of the
> > key/value pair in the sorted list when the AddNewJobQueueRow is called
> > and assert the jobNumber is 4 and jobParameter is a SortedList of one
> > element that contains a key/value pair of "PKEY"/"50".  Does the fact
> > that I'm creating the jobParameter as a new list in the method rather
> > than passing it in impact the way Rhino Mocks might handle the stub?
>
> > public void CreateJobQueueForCustomer(IJobQueue jobQueue)
> > {
> >  try
> >  {
> >    int jobNumber = 4;
> >    var jobParameter = new SortedList();
>
> >    // Populate the jobParameter list
>
> >    jobQueue.AddNewJobQueueRow(jobNumber, jobParameter);
> >  }
> >  catch (Exception ex)
> >  {
> >    _errorMessage =
> > string.Format("MainProcessing.CreateJobQueueForCustomer: Unable to " +
> >      "create job queue for customer.\n Error Message: {0}", ex);
> >    throw new Exception(_errorMessage);
> >  }
> > }
>
> > On Apr 29, 3:55 pm, Patrick Steele <[email protected]> wrote:
> >> Looking back at your original post, I don't see where
> >> "jobParameterList" is passed into your MainProcessor.  I guess it
> >> would probably help if I could see the definition of IJobQueue.
>
> >> ---
> >> Patrick Steelehttp://weblogs.asp.net/psteele
>
> >> On Thu, Apr 29, 2010 at 4:23 PM, NateGQG <[email protected]> wrote:
> >> > Not sure if this is meaningful to our conversation or not, but I took
> >> > your suggestion and tried it without the .stub call and it still
> >> > failed however, the following did pass without the .stub call:
>
> >> > mainProcessing.CreateJobQueueForPatientNotInPm(stubbedJobQueue);
> >> > stubbedJobQueue.AssertWasCalled(x => x.AddNewJobQueueRow(4, new
> >> > SortedList()));
>
> >> > So it recognizes that the AddNewJobQueueRow method was called, it just
> >> > can't pattern match on the arguments I'm expecting from the call when
> >> > I use a stub.  More specifically, it can't match on the SortedList
> >> > argument, it can match on the literal int just fine.  Still unsure as
> >> > to why, but at least I'm a little further down the rabbit hole than I
> >> > used to be.
>
> >> > Thanks
>
> >> > On Apr 29, 9:09 am, Patrick Steele <[email protected]> wrote:
> >> >> I do see where there is some confusion.  But from my perspective (the
> >> >> way I've used RhinoMocks), it doesn't make much sense to Stub a void
> >> >> method on an interface (unless I have specific processing to do).  If
> >> >> you just want to make sure a method was called ("AssetWasCalled"), why
> >> >> stub out its implementation if it's void and doesn't need to return a
> >> >> canned response?
>
> >> >> I think your first example would work if you removed the .Stub call.
>
> >> >> ---
> >> >> Patrick Steelehttp://weblogs.asp.net/psteele
>
> >> >> On Thu, Apr 29, 2010 at 9:12 AM, NateGQG <[email protected]> wrote:
> >> >> > Yes it helps.
>
> >> >> > And you are correct, we are stubbing the IJobQueue and using depency
> >> >> > injection so we can test various parts of the main processing class,
> >> >> > so the AddNewJobQueueRow method is called from
> >> >> > CreateJobQueueForCustomer method.
>
> >> >> > However, I still have one question, isn't the method AddNewJobQueueRow
> >> >> > still getting called whether I stub it or create an expectation for
> >> >> > it?  To me, whether Rhino Mocks intercepts it and executes my stubbed
> >> >> > implementation or the actual original implementation is used, the
> >> >> > method is still getting called.  So from Rhino Mock's perspective,
> >> >> > providing a stub for a method and then executing that stub is not the
> >> >> > same as executing the actual method when we're testing for
> >> >> > AssertWasCalled?
>
> >> >> > Nate
>
> >> >> > --
> >> >> > 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.-Hidequoted text -
>
> >> >> - Show quoted text -
>
> >> > --
> >> > 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.-Hide quoted text -
>
> >> - Show quoted text -
>
> > --
> > 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.

Reply via email to