Hasn't this been posted already?

On Apr 9, 2010, at 10:29 AM, Joseph Dineen <[email protected]> wrote:

Hi, I am new to Rhino Mocks and 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..

No 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] . 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