I am using the Professional version of JustMock and cannot seem to raise events. Version 2013.1.220.3
When I call Mock.Raise() I receive
- NullReferenceException was unhandled by user code. Object reference not set to an instance of an object
using
System;
using
System.Linq;
using
Microsoft.VisualStudio.TestTools.UnitTesting;
using
MockEvent;
using
Telerik.JustMock;
namespace
TestEvent
{
[TestClass]
public
class
JustMockTest1
{
[TestMethod]
public
void
TestMethod1()
{
var mc =
new
MyClass();
var args =
new
EventArgs();
Mock.Raise(() => mc.TestEvent +=
null
, args);
}
}
}
using
System;
using
System.Linq;
namespace
MockEvent
{
public
class
MyClass
{
public
event
TestMethod TestEvent;
public
delegate
void
TestMethod(
object
sender, EventArgs args);
public
MyClass()
{
TestEvent += MyClass_TestEvent;
}
void
MyClass_TestEvent(
object
sender, EventArgs args)
{
Console.WriteLine(
"Running Event"
);
}
}
}
8 Answers, 1 is accepted
0
Hello Steven,
As replied in your previous thread with ID: 674260 (http://www.telerik.com/community/forums/justmock/general-discussions/mocking-sendmail-workflow-activity.aspx), you would need to instantiate a certain mock object to hold your arrange. I wrote the following example, that behaves as expected:
I hope this helps. Please, notify us if you need further assistance.
Greetings,
Kaloyan
the Telerik team
As replied in your previous thread with ID: 674260 (http://www.telerik.com/community/forums/justmock/general-discussions/mocking-sendmail-workflow-activity.aspx), you would need to instantiate a certain mock object to hold your arrange. I wrote the following example, that behaves as expected:
[TestMethod]
public
void
TestMethod1()
{
var mc = Mock.Create<MyClass>();
var args =
new
EventArgs();
Mock.Raise(() => mc.TestEvent +=
null
, args);
}
I hope this helps. Please, notify us if you need further assistance.
Greetings,
Kaloyan
the Telerik team
0
Steve
Top achievements
Rank 1
answered on 26 Mar 2013, 05:51 PM
Kaloyan, thanks for the response, but I am having problems running the following code. It is extended a bit from the example posted earlier. Mainly I exposed a function RunEvent() that will call 'TestEvent'. If I create an instance of MyClass using Mock.Create, it will not fire the event when I call it directly (using RunEvent) or trying to Mock.Raise() the event.
Using build 2013.1.315.0
Using build 2013.1.315.0
using
System;
using
System.Linq;
using
Microsoft.VisualStudio.TestTools.UnitTesting;
using
MockEvent;
using
Telerik.JustMock;
namespace
TestEvent
{
[TestClass]
public
class
JustMockTest1
{
[TestMethod]
public
void
TestMethod1()
{
var mc = Mock.Create<MyClass>(Behavior.CallOriginal);
// if i create a mock, even calling RunEvent fails to trigger the delegates attached to the event.
var args =
new
EventArgs();
mc.RunEvent(args);
// does not call event when instanced created by using Mock.Created
// also if the above line is commented out, the line below will throw a NullReferenceException
Mock.Raise(() => mc.TestEvent +=
null
, args);
}
}
}
using
System;
using
System.Diagnostics;
using
System.Linq;
namespace
MockEvent
{
public
delegate
void
TestHandler(
object
sender, EventArgs args);
public
class
MyClass
{
public
event
TestHandler TestEvent;
public
MyClass()
{
TestEvent += MyClass_TestEvent;
}
public
void
MyClass_TestEvent(
object
sender, EventArgs args)
{
// not being hit.
Debug.WriteLine(
"Running Event"
);
}
public
void
RunEvent(EventArgs args)
{
if
(TestEvent !=
null
)
TestEvent(
this
, args);
}
}
}
0
Hello again Steven,
Thank you for the detailed example.
Investigating it, I noticed that "mc.RunEvent(args);" manages to raise the event every time. However, "Mock.Raise(() => mc.TestEvent += null, args);" fails. It appears that our current implementation of the Raise() method does not allow non-virtual events to be raised as expected.
I have added this bug in our backlog and it should be fixed for future JustMock releases. Please let me know if you want to be notified when a solution could be provided.
As a workaround to the issue, at this point, I could only suggest making your event virtual. This should allow the using of our Mock.Raise() method in your tests.
I have also attached couple of screenshots, to show that raising the event from the "RunEvent()" method works either way and the "Mock.Raise()" works only for virtual events.
I hope this helps.
P.S. For reporting such bug we have granted you some Telerik points.
Kind regards,
Kaloyan
the Telerik team
Thank you for the detailed example.
Investigating it, I noticed that "mc.RunEvent(args);" manages to raise the event every time. However, "Mock.Raise(() => mc.TestEvent += null, args);" fails. It appears that our current implementation of the Raise() method does not allow non-virtual events to be raised as expected.
I have added this bug in our backlog and it should be fixed for future JustMock releases. Please let me know if you want to be notified when a solution could be provided.
As a workaround to the issue, at this point, I could only suggest making your event virtual. This should allow the using of our Mock.Raise() method in your tests.
I have also attached couple of screenshots, to show that raising the event from the "RunEvent()" method works either way and the "Mock.Raise()" works only for virtual events.
I hope this helps.
P.S. For reporting such bug we have granted you some Telerik points.
Kind regards,
Kaloyan
the Telerik team
0
Steve
Top achievements
Rank 1
answered on 27 Mar 2013, 07:44 PM
Yes, I would like to be notified.
Unfortunately, this goes back my SendMail example, and I cannot make the SmtpClient.SendComplete event Virtual as I do not have access to those sources.
Thanks for the explanation.
Unfortunately, this goes back my SendMail example, and I cannot make the SmtpClient.SendComplete event Virtual as I do not have access to those sources.
Thanks for the explanation.
0
Hello Steven,
I understand that the issue is more or less a critical one and we apologize for the inconveniences caused by it.
However, our development team is currently investigating it and a fix should be available soon. I will be happy to notify you once again when we are able to provide you with a solution.
Thank you for the understanding.
All the best,
Kaloyan
the Telerik team
I understand that the issue is more or less a critical one and we apologize for the inconveniences caused by it.
However, our development team is currently investigating it and a fix should be available soon. I will be happy to notify you once again when we are able to provide you with a solution.
Thank you for the understanding.
All the best,
Kaloyan
the Telerik team
0
Hi Steve,
Just to notify you - this bug has been fixed ever since the 2013 Q2 release.
Regards,
Stefan
Telerik
Just to notify you - this bug has been fixed ever since the 2013 Q2 release.
Regards,
Stefan
Telerik
0
Zeeshan
Top achievements
Rank 1
answered on 10 Aug 2013, 07:38 PM
These all coding is very helpful for me
0