我的代码非常类似于此,但无法计算出我如何测试事件处理程序是否发生。验证执行的事件处理程序代码
public class MyClass : MyAbstractClass
{
IFileSystem FileSystem;
public MyClass(IFileSystem myFileSys)
{
FileSystem = myFileSys;
FileSystem.EventHit += new EventHandler(FileSystem_EventHit);
}
public void FileSystem_EventHit(object sender, EventArgs e)
{
//Testing base.OnOutput is not possible which I wont go into
base.OnOutput("EventHit");
}
}
测试代码是在这里:
[Test]
public void DoSomething_WhenCalled_EventFired()
{
var mock = new Moq.Mock<IFileSystem>();
MyClass plugin = new MyClass (mock.Object);
mock.Object.DoSomething();
mock.Raise(x => x.EventHit += null, new EventArgs());
//Verify/Assert that MyClass handled and did something in the event handler
}
你可以提供详细信息WRT base.OnOutput,也许它是可测试的? – 2012-02-20 13:47:12
MyAbstractClass是遗留的,因此MyClass也是遗留下来的,因此它很混乱,需要大量的设置才能测试,所以我希望有一些方法可以测试,而无需验证base.OnOutput – Jon 2012-02-20 13:51:35
常见的场景;回顾性编写单元测试。我不知道任何捷径。每当遇到这种情况,我都会重新构造代码,以便它可以进行单元测试。 – 2012-02-20 13:56:42