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.
