yeah I think there is still a point of mocking you're not getting.
The TimerControl class is your mock, so it needs to be consumed by another
class.
You don't need to test if a mock calls itself.
Lets say you have a Controller:
public class MyController : Controller
{
private readonly ITimerControl _timer;
public MyController(ITimerControl timer)
{
_timer = timer;
}
void ButtonStart()
{
// some logic that might determine whether timer.TimerMethod() is called
}
}
// ignore the NUnit attributes, use microsoft's for your case
[TestFixture]
public class ControllerTests
{
// System under Test
private MyController _controllerSUT;
// Dependencies
private ITimerControl _timerControl;
[SetUp]
public void Setup()
{
_timerControl = MockRepository.GenerateMock<ITimerControl>();
_controllerSUT = new MyController(_timerControl);
}
[Test]
public void ButtonStart_should_call_timerControl_TimerMethod()
{
_controllerSUT.ButtonStart();
// you're asserting that ButtonStart when invoked should call the
dependency method
// this could be AssertWasNotCalled, depends on the logic you're
testing
_timerControl.AssertWasCalled(d => d.TimerMethod());
}
}
>________________________________
> From: E Jo <[email protected]>
>To: Rhino.Mocks <[email protected]>
>Sent: Tuesday, November 6, 2012 4:02 PM
>Subject: [RhinoMocks] Re: Fw: Newbie, need help with simple mock for void
>method
>
>here the summary of the TimerControl class, sorry I was trying to keep
>it simple to just the method. Start is apart of the TimerControl
>class.
>
>======================
>public class TimerControl : ITimerControl
>{
> Public TimerControl()
> {
> }
>
> Public void TimerMethod()
> {
> Start();
> }
>
> Public void PauseTimer()
> {
> \\Loops thru a set of list threads
> }
>
> Public void ContinueTimer()
> {
> Start();
> }
>
> Public void Start()
> {
> \\ foreach loop thru a list
> }
>
> Public void Stop()
> {
> PauseTimers();
> }
>
>}
>
>======================
>
>I've tried the following.
>
>[TestMethod]
>public void ContinueTimer_Test()
>{
> var mockTimer = MockRepository.GenerateMock<ITimerControl>();
> mockTimer.ContinueTimer();
>
> mockTimer.VerifyAllExpectations();
>}
>
>I was going by this suggestion from this site
>http://www.ronaldwidha.net/2009/01/30/mocking-void-method-with-rhino-mocks/
>
>but I get his error " Invalid call, the last call has been used or no
>call has been made (make sure that you are calling a virtual (C#) /
>Overridable (VB) method)."
>
>
>On Nov 6, 1:55 pm, Mark Wilkinson <[email protected]> wrote:
>> What is Start() a part of? What class? I assume the Timer class?
>>
>> you need to then have your ITimerControl consumed by some other class and
>> you would assert that your method "TimerMethod()" is called when expected.
>>
>> I think I understand what you're trying to do, to prevent actually calling a
>> real timer to start, so you're on the right track with the purpose of
>> Mocking but some other class needs to be your system under test, the
>> consumer of the ITimerControl class.
>>
>>
>>
>>
>>
>>
>>
>> >________________________________
>> > From: E Jo <[email protected]>
>> >To: Rhino.Mocks <[email protected]>
>> >Sent: Tuesday, November 6, 2012 2:38 PM
>> >Subject: [RhinoMocks] Re: Fw: Newbie, need help with simple mock for void
>> >method
>>
>> >yes, i would like to know if Start() was called inside the
>> >TimerMethod().
>>
>> >On Nov 6, 1:36 pm, Mark Wilkinson <[email protected]> wrote:
>> >> so you want to find out if Start() is called?
>>
>> >> >________________________________
>> >> > From: E Jo <[email protected]>
>> >> >To: Rhino.Mocks <[email protected]>
>> >> >Sent: Tuesday, November 6, 2012 2:30 PM
>> >> >Subject: [RhinoMocks] Re: Fw: Newbie, need help with simple mock for
>> >> >void method
>>
>> >> >System - as in the Namespace "using System.IO" or the class.
>>
>> >> >The code below is the class I'm trying to test:
>>
>> >> >======================
>> >> >public class TimerControl : ITimerControl
>> >> >{
>> >> > Public TimerControl()
>> >> > {
>> >> > }
>>
>> >> > Public void TimerMethod()
>> >> > {
>> >> > Start();
>> >> > }
>> >> >}
>>
>> >> >======================
>>
>> >> >I just want to know if TimerMethod() was fired.
>>
>> >> >I've seen various ways of checking the void method within this Google
>> >> >Group, but they have layers of layers of code, my code is just simple.
>> >> >It has a empty constructor (which will be filled later) and void
>> >> >methods for different flows. My TimerControl Class just has void
>> >> >methods w/out parameters. I just want to test the flow, in which i
>> >> >want to know if the TimerMethod was executed.
>>
>> >> >On Nov 6, 1:15 pm, Mark Wilkinson <[email protected]> wrote:
>> >> >> Sorry here's my answer:
>>
>> >> >> >You're not testing anything.
>>
>> >> >> >If you're creating a mock then the system under test needs to use
>> >> >> >that mock.
>>
>> >> >> >You have no system under test inside this TestClass.
>>
>> >> >> >A system under test would be the consumer of this interface.
>>
>> >> >> >in this case you'd use it like:
>>
>> >> >> >myClass.SomeMethod(); // in SomeMethod you expect TimerMethod to be
>> >> >> >called or not to be called, based on the logic inside that method.
>>
>> >> >> >then your next line would be:
>>
>> >> >> >target.AssertWasNotCalled(method=>Method.TimerMethod());
>>
>> >> >> >>________________________________
>> >> >> >> From: E Jo <[email protected]>
>> >> >> >>To: Mark Wilkinson <[email protected]>
>> >> >> >>Sent: Tuesday, November 6, 2012 12:33 PM
>> >> >> >>Subject: Re: Newbie, need help with simple mock for void method
>>
>> >> >> >>[TestClass]
>> >> >> >>public Class
>>
>> >> >> TimerControllerTest
>>
>> >> >> >>{
>> >> >> >> [TestMethod]
>> >> >> >> public void TimerMethod_Test1()
>> >> >> >> {
>> >> >> >> ITimerControl target =
>> >> >> >>MockRepository.GenerateMock<ITimerControl>();
>>
>> >> >> >> target.AssertWasNotCalled(method=>Method.TimerMethod());
>> >> >> >> }
>>
>> >> >> >> [TestMethod]
>> >> >> >> public void TimerMethod_Test2()
>> >> >> >> {
>> >> >> >> ITimerControl mock =
>> >> >> >>MockRepository.GenerateMock<ITimerControl>();
>>
>> >> >> >> Expect.Call( mock.TimerMethod);
>> >> >> >> }
>>
>> >> >> >>}
>>
>> >> >> >>On Nov 6, 11:24 am, Mark Wilkinson <[email protected]> wrote:
>> >> >> >>> can you post the whole Unit Test class, the
>>
>> >> >> TestFixture you're using for this code below.
>>
>> >> >> >>> >________________________________
>> >> >> >>> > From: E Jo <[email protected]>
>> >> >> >>> >To: [email protected]
>> >> >> >>> >Sent: Tuesday, November 6, 2012 12:02 PM
>> >> >> >>> >Subject: [RhinoMocks] Newbie, need help with simple mock for void
>> >> >> >>> >method
>>
>> >> >> >>> >Can anyone help with a simple mock for void methods. I'm been
>> >> >> >>> >trying all the suggested examples and still cannot the method to
>> >> >> >>> >be mock correctly.
>>
>> >> >> >>> >Below is the code example:
>>
>> >> >> >>> >==================================
>>
>> >> >> >>> >public class TimerControl : ITimerControl
>> >> >> >>> >{
>>
>> >> >> >>> >Public void TimerMethod()
>>
>> >> >> >{
>> >> >> >>> > Start();
>> >> >> >>> >}
>>
>> >> >> >>> >}
>>
>> >> >> >>> >==================================
>>
>> >> >> >>> >I've tried the following and it won't work.
>>
>> >> >> >>> >ITimerControl target =
>> >> >> >>> >MockRepository.GenerateMock<ITimerControl>();
>>
>> >> >> >>> >target.AssertWasNotCalled(method=>Method.TimerMethod());
>>
>> >> >> >>> >============ this did not do nothing, it did not hit the
>> >> >> >>> >TimerMethod.
>>
>> >> >> >>> >And the tried the following also:
>>
>> >> >> >>> >ITimerControl mock = MockRepository.GenerateMock<ITimerControl>();
>>
>> >> >> >>> >Expect.Call( mock.TimerMethod);
>>
>> >> >> >>> >=========== no success.
>>
>> >> >> >>> >I'm new to Unit testing and tried very hard to find tutorials on
>> >> >> >>> >Rhino Mock and read the documentation, but I'm still a noob in
>> >> >> >>> >rhino mock and unit testing. Any help with this simple
>> >> >> mock?
>>
>> >> >> >>> >-EJ
>>
>> >> >> >>> >--
>> >> >> >>> >You received this message because you are subscribed to the
>> >> >> >>> >Google Groups "Rhino.Mocks" group.
>> >> >> >>> >To view this discussion on the web
>> >> >> >>> >visithttps://groups.google.com/d/msg/rhinomocks/-/AUuQUe42OO4J.
>> >> >> >>> >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
>> >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.
>
>
>
>
--
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.