【发布时间】:2016-02-01 05:49:45
【问题描述】:
我需要一个测试用例来测试事件处理程序。在我的项目中,我只是使用事件处理程序将总文件大小值从 Model 类传递给 ViewModel 类。
为事件处理程序编写测试用例的所有方法是什么?在我的测试用例中我必须做什么?
我的测试用例不工作..
查看模型
public RipWatcherWindowShellViewModel(IWorkflowManager workflowManager)
{
WorkflowManager = workflowManager;
workflowManager.GetTotalUsfFileSize += workflowManager_GetTotalFileSize;
}
/// <summary>Delegate for workflowManager get total file size</summary>
/// <param name="sender">The sender object</param>
/// <param name="e">The FileSizeChangedEventArgs object</param>
public void workflowManager_GetTotalFileSize(object sender, FileSizeChangedEventArgs e)
{
if(e.FileSize== 0)
{
throw new ArgumentException("We cannot calculate progress percentage because total file size is 0");
}
TotalUsfFileSize = e.FileSize;
}
型号
public class WorkflowManager
{
public event EventHandler<FileSizeChangedEventArgs> GetTotalUsfFileSize;
public void StartWorkflow()
{
totalFileSize= jobWatcher.StartWatching(HotFoldersCollection);
//Event handler Raised here....
GetTotalUsfFileSize.SafeInvoke(this, new FileSizeChangedEventArgs(totalFileSize));
}
}
事件处理程序
public class FileSizeChangedEventArgs:EventArgs
{
public FileSizeChangedEventArgs (Double fileSize)
{
FileSize = fileSize;
}
public Double FileSize
{
get;
private set;
}
}
我的测试用例
[Test]
public void IsGetTotalFileSizeEventFired()
{
worflowManager = new Mock<IWorkflowManager>().Object;
ripWatcherWindowShellViewModel = new RipWatcherWindowShellViewModel(worflowManager);
ripWatcherWindowShellViewModel.GetTotalUsfFileSize += delegate { eventRaised = true; };
Assert.IsTrue(eventRaised);
}
【问题讨论】:
-
你想测试什么?您在哪里举办活动?
-
在
ripWatcherWindowShellViewModel.TransferredFileSize += ...之后需要一些东西来引发事件。 -
我认为您需要将 EventHandler 和“业务”逻辑分开。在 ViewModel 中创建一个以文件大小为参数的方法。并为该方法编写测试。对于 EventHandler 足以测试该事件已引发并执行您的处理程序。
标签: c# unit-testing