SampleConfirmationDialog可以通过哪些方式进行单元测试? SampleConfirmationDialog将通过验收测试来执行,但是我们如何才能对它进行单元测试,因为MessageBox不是抽象的而且没有匹配的接口?
public interface IConfirmationDialog
{
/// <summary>
/// Confirms the dialog with the user
/// </summary>
/// <returns>True if confirmed, false if not, null if cancelled</returns>
bool? Confirm();
}
/// <summary>
/// Implementation of a confirmation dialog
/// </summary>
public class SampleConfirmationDialog : IConfirmationDialog
{
/// <summary>
/// Confirms the dialog with the user
/// </summary>
/// <returns>True if confirmed, false if not, null if cancelled</returns>
public bool? Confirm()
{
return MessageBox.Show("do operation x?", "title", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes;
}
}
答案 0 :(得分:5)
你不能,它在当前状态下是不可测试的。对于这个特定的类,单元测试也没有价值......它只是一个内置框架功能的轻量级包装器,所以你要做的就是测试框架。
如果你绝对必须测试它,IConfirmationDialog接口应该有另一个依赖项,你可以在单元测试中模拟它。
答案 1 :(得分:0)
您应该研究一下商业模拟框架Typemock,它允许您使用.NET性能分析库对这些情况进行单元测试。有关详细信息,请参阅their website。
答案 2 :(得分:0)
我认为停止在该级别进行测试是可以的。您与IConfirmationDialog
的互动比验证MessageBox.Show
实际被调用更重要。由于这是一个界面,并且很容易被模拟,我认为你已经很好了。