检查单元测试中是否抛出参数

hol*_*ard 3 c# unit-testing try-catch

我正在为一个应用程序进行单元测试,该应用程序有一个构造函数,它将三个值作为参数.数字应为0或更高,现在我正在编写一个单元测试,用于抛出异常的构造函数,如果不是这样的话.

我无法弄清楚的是我如何在"断言"之后写什么来确定这一点,以便在非法数字传递给构造函数时测试通过.提前致谢.

编辑:我正在使用MSTest框架

   public void uniqueSidesTest2()
    {
        try {
            Triangle_Accessor target = new Triangle_Accessor(0, 10, 10);
        }
        catch (){
            Assert // true (pass the test)
            return;
        }

        Assert. // false (test fails)
    }
Run Code Online (Sandbox Code Playgroud)

//从代码中......

    public Triangle(double a, double b, double c) {
        if ((a <= 0) || (b <= 0) || (c <= 0)){
            throw new ArgumentException("The numbers must higher than 0.");
        }
        sides = new double[] { a, b, c };
    }
Run Code Online (Sandbox Code Playgroud)

Roy*_*tus 9

首先,你应该抛出一个ArgumentOutOfRangeException而不仅仅是一个ArgumentException.

其次,你的单元测试应该期望抛出异常,如下所示:

[ExpectedException(typeof(ArgumentOutOfRangeException))]
public static void MyUnitTestForArgumentA()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

因此,您需要创建单独的单元测试 - 每个参数一个 - 测试当参数超出范围时方法是否抛出正确的异常.