在 c# 中对窗体和事件进行单元测试



我想为 C# 代码编写测试用例,以触发事件或向用户显示表单以供输入,例如:

private void CreateRecord_Click(object sender, EventArgs e)
{
    try
    {
        this.InitiateRecording();
    }
    catch (BubbleUiException ex)
    {
        objLog.Error(TextRes.IDC_EShuttleError, ex);
        MessageBox.Show(
            ex.Message,
            TextRes.IDC_EShuttleError,
            MessageBoxButtons.OK,
            MessageBoxIcon.Error);
     }
     catch (Exception ex)
     {
         objLog.Error("Error occurred", ex);
         MessageBox.Show(
             ex.Message,
             TextRes.IDC_Error,
             MessageBoxButtons.OK,
             MessageBoxIcon.Error);
     }
 }

如何使用 Mbunit 为这些类型的代码编写单元测试?

"纯粹主义"的答案是,由于它是一种私有方法,因此不应对其进行单元测试,因为它是实现细节。您应该只测试公共 API。

由于它是一个事件处理程序,因此出于各种原因,您可能仍希望对其进行测试。正如目前所写,这将很难做到。事实上,你有一个

this.InitiateRecording();

行表明您尚未正确实现关注点分离。用于处理事件的类似乎还包含用于处理记录的代码。其次,您有对 MessageBox.Show 的硬编码调用,这将使测试变得困难,因为您的测试无法以自动、独立的方式运行。

因此,我建议:

  1. 将录制功能重构为一个单独的类,该类可以进行单元测试。
  2. 将 MessageBox.Show 方法注入该类,以便在测试期间可以存根。
  3. 不要测试 CreateRecord_Click((,因为它只会在新类中调用一个方法。

测试:

  1. this.InitiateRecording()被称为
  2. 调用this.InitiateRecording()时强制BubbleUiException
  3. 强制调用this.InitiateRecording()时未BubbleUiException Exception
  4. 换行MessageBox.Show以便您可以测试它在引发异常时是否打印出预期的内容。
  5. 调用测试 objLog.Error

您可以假定您的 click 事件有效(单击控件时调用该方法(,因为Microsoft已经对此进行了测试。

相关内容

  • 没有找到相关文章

最新更新