我的代碼非常類似於此,但無法計算出我如何測試事件處理程序是否發生。驗證執行的事件處理程序代碼
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