Rhino.Mocks has some pretty good syntax for raising events:

http://www.ayende.com/wiki/Rhino+Mocks+3.5.ashx#Howtoraiseevents

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



On Tue, Nov 30, 2010 at 4:59 PM, Bill44077 <[email protected]> wrote:
> Hi,
>
> Well I found why the above test wasn't working. I have this line:
>
>            dict.Add("LoadID", "123");
>
> and it should have been:
>
>            dict.Add("LoadId", "123");   <-- the d in Id needed to be
> lower case to match... ugh!
>
> Now to try and figure out how to check that the event is wired up
> correctly and then to try and raise it and see if the Completed method
> is called.
>
> thanks,
> Bill
>
> On Nov 30, 4:46 pm, Bill44077 <[email protected]> wrote:
>> Hey Steve!
>> Good to hear from you - thanks for the comeback. No, I hadn't seen
>> Jon's examples before. They do look really good but I'm still
>> struggling. I'm trying to get just the AssetWasCalled to work and am
>> having trouble. It says it isn't. It probably has something to do with
>> the params. Here's what I'm doing:
>>
>>         [TestMethod]
>>         public void SearchForStopEvents()
>>         {
>>             // Arrange:
>>             ValidationRules vr = new ValidationRules();
>>             Dictionary<string, string> dict = new Dictionary<string,
>> string>();
>>             string LoadID = "123";
>>             GlobalVariables.SearchType st =
>> GlobalVariables.SearchType.ByLoadId;
>>
>>             // Act: When I push search button
>>             var stub = MockRepository.GenerateStub<IDataService>();
>>             Search sut = new Search(stub, vr);
>>             sut.AddFilter(GlobalVariables.LoadId, LoadID);
>>             dict.Add("LoadID", "123");
>>             sut.GetStopEvents(GlobalVariables.SearchType.ByLoadId);
>>
>>             // Assert:
>>             stub.AssertWasCalled(s => s.GetStopEventsAsync(dict,
>> GlobalVariables.SearchType.ByLoadId));
>>         }
>>
>> Here’s my error:
>>
>> IDataService.GetStopEventsAsync(System.Collections.Generic.Dictionary`2[Sys 
>> tem.String,System.String],
>> ByLoadId); Expected #1, Actual #0.
>>
>> Not sure what this ‘2 means. Don't know how to make it ignore or not
>> care about what the params are, if that's possible or reasonable.
>>
>> Thanks,
>>
>> Bill
>>
>> On Nov 30, 2:29 pm, Stephen Bohlen <[email protected]> wrote:
>>
>>
>>
>>
>>
>>
>>
>> > Bill:
>>
>> > Have you taken a look 
>> > athttps://github.com/JonKruger/RhinoMocksExamples/raw/master/src/RhinoM...
>> > an example of most common usage scenarios that you will encounter?
>> > Its a
>> > bit old now, but is (mostly) still correct in re: its syntax and probably
>> > covers most of what you need in re: general syntax for the use-cases you
>> > mention here.
>>
>> > Steve Bohlen
>> > [email protected]http://blog.unhandled-exceptions.comhttp://twitter.com/sbohlen
>>
>> > On Tue, Nov 30, 2010 at 1:31 PM, Bill44077 <[email protected]> wrote:
>> > > Hi Patrick,
>> > > Thanks for the reply! I'm a big fan of your writings.
>>
>> > > Details: I have a wcf web service and the interface has lots of stuff
>> > > in it, but I am mainly interested in making a call to one of these
>> > > services to have it get data from the database and return it to my SL4
>> > > application. That part of the interface includes:
>>
>> > >    public interface IDataService : IMACSWcfService
>> > >    {
>> > >        ...
>> > >        void
>> > > GetStopEventsAsync(System.Collections.Generic.Dictionary<string,
>> > > string> param, object userState);
>> > >        event System.EventHandler<GetStopEventsCompletedEventArgs>
>> > > GetStopEventsCompleted;
>> > >        ...
>> > >     }
>>
>> > > I have a search class that will need to call this DataService async
>> > > and in the production code I will need to do something like this:
>>
>> > > 1. Pass in the IDataService implementation using constructor injection
>> > > to the Search class
>> > > 2. Save this locally in the Search class
>> > > 3. Create a method in Search that will call the ws to get the data
>> > > 4. When the data is returned an event is raised and the callback is
>> > > executed
>> > > 5. The callback saves the returned data
>>
>> > > If want to TDD this with Rhino/MSTest then
>>
>> > >        private MockRepository mockRepository;
>> > >        private IDataService mockDS;
>>
>> > >        [TestMethod]
>> > >        public void SearchForStopEventsShouldCallGetStopEventsAsync()
>> > >        {
>> > >            // Arrange:
>> > >            mockRepository = new MockRepository();
>> > >            mockDS = mockRepository.StrictMock<IDataService>();
>> > >            Search sut = new Search(mockDS);
>>
>> > >            // Act:
>> > >            sut.GetStopEvents(GlobalVariables.SearchType.ByLoadId);
>>
>> > >            // Assert:
>>
>> > > RhinoMocksExtensions.AssertWasCalled(mockDS.GetStopEventsAsync(null,
>> > > null));
>> > >        }
>>
>> > >        [TestMethod]
>> > >        public void
>> > > SearchForStopEventsShouldRegisterCallbackEvent_OnDataReturned()
>> > >        {
>> > >            // Arrange:
>> > >            mockRepository = new MockRepository();
>> > >            mockDS = mockRepository.StrictMock<IDataService>();
>> > >            Search sut = new Search(mockDS);
>>
>> > >            // Act:
>> > >            sut.GetStopEvents(GlobalVariables.SearchType.ByLoadId);
>>
>> > >            // Assert:
>>
>> > >        }
>>
>> > >        [TestMethod]
>> > >        public void
>> > > SearchForStopEventsShouldCallbackEvent_OnDataReturned_WhenEventIsRaised()
>> > >        {
>> > >            // Arrange:
>> > >            mockRepository = new MockRepository();
>> > >            mockDS = mockRepository.StrictMock<IDataService>();
>> > >            Search sut = new Search(mockDS);
>>
>> > >            // Act:
>> > >            sut.GetStopEvents(GlobalVariables.SearchType.ByLoadId);
>>
>> > >            // Assert:
>>
>> > >        }
>>
>> > > Here is what my production code will look like:
>> > >    public class Search : ISearch
>> > >    {
>> > >        private readonly IDataService _dataService;
>>
>> > >        public Search(IDataService ds)
>> > >        {
>> > >            _dataService = ds;
>> > >        }
>>
>> > >        public void GetStopEvents(GlobalVariables.SearchType st)
>> > >        {
>> > >            try
>> > >            {
>> > >                _dataService.GetStopEventsCompleted +=
>> > > OnDataReturned; ;
>> > >                _dataService.GetStopEventsAsync(_param, st);
>>
>> > >            }
>> > >            catch (Exception ex)
>> > >            {
>> > >                if (!ViewModelLocator.IsMACSAdjustmentVMNull)
>> > >                {
>>
>> > > ViewModelLocator.MACSAdjustmentViewModelStatic.ReturnedMessage =
>> > > ex.Message;
>> > >                }
>> > >                throw new Exception(ex.Message);
>> > >            }
>>
>> > >        void OnDataReturned(object sender,
>> > > GetStopEventsCompletedEventArgs e)
>> > >        {
>>
>> > >            var args = new GetDataDoneInSearchModelArgs();
>> > >            if (e.Result != null && e.Result.ToList().Count > 0)
>> > >            {
>> > >                _stopEventsDataListReturned =
>> > > e.Result.Select(dtoStopEvent => new Stop(dtoStopEvent)).ToList();
>> > >                ...
>> > >            }
>> > >            else
>> > >            {
>> > >                args.Message = "No Data Found";
>> > >            }
>> > >        }
>>
>> > > Clearly, I have no idea where to start with Rhino,
>> > > 1)  whether I should be using a strictmock or a stub.
>> > > 2) how to check that a method on the mock was called
>> > > 3) how to check if the even has been registered
>> > > 4) how to raise the event
>> > > 5) how to check if the callback was called.
>>
>> > > I find so many different syntaxes in examples using Rhino probably
>> > > because of all of the different APIs that have existed over time. I'd
>> > > like to be able to use the AAA Syntax if possible but am totally lost
>> > > when it comes to how.
>>
>> > > thanks much!
>> > > Bill Campbell
>> > > (twitter: bill44077)
>>
>> > > On Nov 30, 10:52 am, Patrick Steele <[email protected]> wrote:
>> > > > I've never mocked anything like this before either, but I have used
>> > > > Rhino Mocks before.  Do you have some sample code that you could show?
>> > > >  Something concrete like your interface definition and how you want
>> > > > things mocked out?
>>
>> > > > ---
>> > > > Patrick Steelehttp://weblogs.asp.net/psteele
>>
>> > > > On Sat, Nov 27, 2010 at 3:41 PM, Bill44077 <[email protected]>
>> > > wrote:
>> > > > > Hi,
>> > > > > I've been trying to figure out how to mock an async wcf call mocking
>> > > > > out the interface using RhinoMocks. I can't seem to be able to figure
>> > > > > out how to do this using the AAA syntax (not playback/record), 
>> > > > > mocking
>> > > > > raising the callback event, using lambdas, receiving the result 
>> > > > > object
>> > > > > from the mock. I basically want to mock out this whole collaboration.
>> > > > > I'm quite sure this is possible but can't figure out the 
>> > > > > syntax/calls.
>> > > > > If anyone has an example of how to do this - I'd really appreciate 
>> > > > > it.
>> > > > > I would think this would be a very common set of tests when doing TDD
>> > > > > with Silverlight since everything with the server is an async call.
>> > > > > Thanks in Advance!
>> > > > > Bill Campbell
>>
>> > > > > --
>> > > > > 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]<rhinomocks%2bunsubscr...@googlegrou
>> > >  ps.com>
>> > > .
>> > > > > 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]<rhinomocks%2bunsubscr...@googlegrou
>> > >  ps.com>
>> > > .
>> > > 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.
>
>

-- 
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