The point that Tim is making is that, ANY call that is made on your StrictMock, for which you HAVE NOT set an expectation for, will cause the test to fail.
Whe you use a StrictMock, you have to set an expectation for EVERY call made on that object. So it is completely expeted that a call to model.GetCalendar will throw an expectation excepton, since you have not set up such an expectation. On Apr 14, 11:07 am, Joseph Dineen <[email protected]> wrote: > Well I have tried it using DynamicMock instead of StrictMock and it > made no difference. > Besides, the line > > > > Rhino.Mocks.Expect.Call(model.CreateNewCalendar(view.CalendarName)).Repeat.AtLeastOnce.Return(c) > > Should create the expectation and I know the event is raised because I > can see the call in the event in the debugger. > The problem arises when the cal is made to the model.GetCalendar > method. There the expectation exception gets raised. > I have akso tried adding IgnoreArguments to no avial. > I am sure I am missing something but I do not know what. > > On Apr 13, 8:39 pm, Tim Barcz <[email protected]> wrote: > > > > > It appears you are using strict mocks...which means any call not "expected" > > will cause the test to fail. > > > On Tue, Apr 13, 2010 at 11:40 AM, Joseph Dineen > > <[email protected]>wrote: > > > > Hi, I am new to Rhino Mocks and I have tried to post this message > > > before but it does not seem to have appeared on the messageboard nor > > > did I get any indication that the moderators have seen the message. > > > While i have been using Unit Testing and TDD for a while I have not > > > gotten into mocking in any major way. I did use DotNetMock for a while > > > in a single project and I want to refactor parts of it using VB.NET > > > 2010 as a learning excersise but found that DotNetMock does not play > > > well with MSUnitTest and appears to be a dead project. > > > So I decided to learn Rhino Mocks after some research on the net. > > > To do this I decided to implement a view model comtoller application > > > and communicate from the view to the controller with events, call > > > stuff from the model in the event handlers on the controller and see > > > how it works out. I also decided to use the older Replay verify syntax > > > since I have mostly worked with 2005 and earlier and have not yet > > > looked at lambda functions. Also the only examples in vb I could find > > > used this systax and while I could see that the C# lambda stuff was > > > trying to do I have no idea of how to implement that code in vb. > > > So some code ( the application aim to generate fantasy calendars for > > > rpgs.) > > > > ''' <summary> > > > ''' This the view of the calendars > > > ''' </summary> > > > Public Interface ICalendarsView > > > > 'the events represent user actions that are addressed by the model > > > Event CreateNewCalendar As EventHandler > > > > Event Save As EventHandler > > > > Event GetCalendarList As EventHandler > > > > Event GetCalendar As EventHandler > > > > Property CalendarName As String > > > > ...... > > > > 'these methods allow the controller to pass data to the view > > > Sub ShowPreviewForYear(ByVal yearNumber As Integer) > > > > Sub SetCalendar(ByVal c As Calendar) > > > > Sub SetCalendarList(ByVal calList As List(Of Calendar)) > > > > End Interface > > > > ''' <summary> > > > ''' the Model > > > ''' </summary> > > > ''' <remarks></remarks> > > > Public Interface ICalendarEngine > > > > Function GetCalendars() As List(Of Calendar) > > > > Function GetCalendar(ByVal name As String) As Calendar > > > > Function CreateNewCalendar(ByVal name As String) As Calendar > > > > Sub SaveCalendar(ByVal c As Calendar) > > > > End Interface > > > > The controller > > > '' <summary> > > > ''' Controller of the view > > > ''' </summary> > > > ''' <remarks>Instantiated and refers to the model and the view</ > > > remarks> > > > Public Class CalendarsController > > > > Private WithEvents _view As ICalendarsView > > > Private _model As ICalendarEngine > > > > Public Sub New(ByVal view As ICalendarsView, ByVal model As > > > ICalendarEngine) > > > If IsNothing(view) Or IsNothing(model) Then > > > Throw New ArgumentNullException("Passed parameters were > > > not instantiated") > > > End If > > > _view = view > > > _model = model > > > 'Add the event handlers > > > AddHandler _view.CreateNewCalendar, AddressOf > > > OnCreateNewCalendar > > > > End Sub > > > > Private Sub OnCreateNewCalendar(ByVal sender As Object, ByVal e As > > > EventArgs) > > > Dim c As Calendar = _model.GetCalendar(CType(sender, > > > ICalendarsView).CalendarName) > > > > End Sub > > > > The test > > > > Imports System.Text > > > Imports ArdoughterSoftware.FantasyCalendar > > > Imports Rhino.Mocks > > > Imports Rhino.Mocks.Interfaces > > > > <TestClass()> > > > Public Class TestCalendarsController > > > > Private testContextInstance As TestContext > > > > '''<summary> > > > '''Gets or sets the test context which provides > > > '''information about and functionality for the current test run. > > > '''</summary> > > > Public Property TestContext() As TestContext > > > Get > > > Return testContextInstance > > > End Get > > > Set(ByVal value As TestContext) > > > testContextInstance = value > > > End Set > > > End Property > > > > Private moMockery As MockRepository > > > > ' Use TestInitialize to run code before running each test > > > <TestInitialize()> Public Sub MyTestInitialize() > > > moMockery = New MockRepository > > > End Sub > > > ' > > > ' Use TestCleanup to run code after each test has run > > > <TestCleanup()> Public Sub MyTestCleanup() > > > moMockery.VerifyAll() > > > End Sub > > > > Public Sub TestCreateNewCalendarEventIsRaisedTheOldWay() > > > Dim e As New EventArgs > > > Dim c As New Calendar > > > Dim view As ICalendarsView > > > view = moMockery.Stub(Of ICalendarsView)() > > > Dim model As ICalendarEngine > > > model = moMockery.StrictMock(Of ICalendarEngine)() > > > Dim calendarName As String = "Dale Reckoning" > > > view.CalendarName = calendarName > > > AddHandler view.CreateNewCalendar, Nothing > > > LastCall.Constraints(Constraints.Is.NotNull) > > > > Dim CreateNewCalendarEventRaiser As IEventRaiser = > > > LastCall.GetEventRaiser() > > > > Rhino.Mocks.Expect.Call(model.CreateNewCalendar(view.CalendarName)).Repeat.AtLeastOnce.Return(c) > > > > moMockery.ReplayAll() > > > > Dim controller = New CalendarsController(view, model) > > > > CreateNewCalendarEventRaiser.Raise(CType(view, Object), e) > > > End Sub > > > > End Class > > > > The Error message > > > > Test method > > > > TestCalendars.TestCalendarsController.TestCreateNewCalendarEventIsRaisedTheOldWay > > > threw exception: > > > Rhino.Mocks.Exceptions.ExpectationViolationException: > > > ICalendarEngine.GetCalendar("Dale Reckoning"); Expected #0, Actual #1. > > > TestCleanup method TestCalendars.TestCalendarsController.MyTestCleanup > > > threw exception. Rhino.Mocks.Exceptions.ExpectationViolationException: > > > Rhino.Mocks.Exceptions.ExpectationViolationException: > > > ICalendarEngine.GetCalendar("Dale Reckoning"); Expected #0, Actual > > > #1.. > > > > Now Googling that message, would indicate that the method and the > > > event raise are not getting the parameters they expect and that they > > > are expecting a particular instance of an object. Which I do not > > > understand as they are getting the same instance of the object. I have > > > tried placing IgnoreArguments qualifiers on the expected calls and the > > > GetEventRiser method but it does not appear to make any difference. > > > > What am I not getting? I am sure it is one of those things that is > > > obvious once you know it, > > > > Also if I do get this code working how would i put it in AAA syntax? > > > > Thanks > > > Joe > > > > -- > > > 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...@googlegroups.com> > > > . > > > For more options, visit this group at > > >http://groups.google.com/group/rhinomocks?hl=en. > > > -- > > Tim Barcz > > Microsoft C# MVP > > Microsoft > > ASPInsiderhttp://timbarcz.devlicio.ushttp://www.twitter.com/timbarcz- 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 at http://groups.google.com/group/rhinomocks?hl=en.
