如何在测试类中捕获由另一个类抛出的异常
本文关键字:另一个 异常 测试类 | 更新日期: 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异常处理