如何在测试类中捕获由另一个类抛出的异常

本文关键字:另一个 异常 测试类 | 更新日期: 2023-09-27 18:09:38

我有一个窗口表单与一个按钮,我正试图测试它与codedUitest。我希望测试失败,如果任何异常被抛出,但在测试类中,它没有捕获异常。

下面是我的代码:
public void button1_Click(object sender, EventArgs e)
{ 
    double[] dummy = new double[1];
    int i = 1;
    if (i > 0)
    {
        throw new System.IndexOutOfRangeException("index parameter is out of range.");      
    }
    else
    {             
        dummy[i] = 6;  
    }
}

测试方法为:

public void CodedUITestMethod1()
{
    try
    {
        this.UIMap.TryBtn1();
    }
    catch (IndexOutOfRangeException)
    {
        Assert.Fail();
    }
}

如何在测试类中捕获由另一个类抛出的异常

您已经编写了一个集成测试。

免责声明:我是一个web开发人员-所以我必须假设这类似于使用浏览器驱动程序,如selenium。

所以你所做的是告诉UI驱动程序点击按钮。这会运行代码,但是它不会在测试上下文中运行代码。您的测试只能访问UI。

为了检测是否已经抛出错误,我猜你必须检查UI,看看是否出现了弹出窗口。

如果你只想测试方法(根据你的情况可能更可取),你可以使用NUnit和Moq。

using System;
using Moq;
using NUnit.Framework;
namespace Tests
{
    [TestFixture]
    class Tests
    {
        [Test]
        public void Throws()
        {
            var sender = new Mock<object>();
            var args = new Mock<EventArgs>();
            Assert.Throws<IndexOutOfRangeException>(() => button1_Click(sender.Object, args.Object));
        }
        public void button1_Click(object sender, EventArgs e)
        {
            double[] dummy = new double[1];
            int i = 1;
            if (i > 0)
            {
                throw new System.IndexOutOfRangeException("index parameter is out of range.");
            }
            else
            {
                dummy[i] = 6;
            }
        }
    }
}

您可以添加[ExpectedException(typeof(IndexOutOfRangeException))]属性到您的TestMethod。看看MSTest异常处理

相关文章: