【发布时间】:2014-01-22 17:11:07
【问题描述】:
我正在尝试使用忽略事件的 JustMock 编写单元测试。
我确实不想测试 Event 本身,因为它会调用各种需要大量工作来模拟的内部函数。
下面是一些示例代码:
public class Sample
{
public delegate void OneParameterFunction(int someVar);
public event OneParameterFunction TheEvent;
public Sample()
{
TheEvent += CallMe;
}
public void CallMe(int someVar)
{
Debug.WriteLine("CallMe was fired with parameter: " + someVar);
}
public void FireEvent()
{
// do stuff, business logic here...
if (TheEvent != null)
TheEvent(3);
}
}
这是我希望喜欢写但不能写的测试:
[TestClass]
class EventMocking
{
[TestMethod]
public void DoNothingOnEvent()
{
var s = new Sample();
Mock.Arrange(() => s.TheEvent(Arg.AnyInt))
.DoNothing();
Mock.Arrange(() => s.CallMe(Arg.AnyInt))
.OccursNever();
s.FireEvent();
Mock.Assert(() => s.CallMe(Arg.AnyInt));
}
}
但我收到以下编译器错误:
Error 1 The event 'Sample.TheEvent' can only appear on the left hand side of += or -= (except when used from within the type 'Sample') C:\BizObjectTests\EventMocking.cs
有人对如何阻止事件传播有任何建议吗?我也不想Mock.Create<T> 有很多原因,其中一个是我想再次设置更多的测试数据/对象。
【问题讨论】:
标签: c# unit-testing events telerik justmock