单元测试方法参数

时间:2020-02-27 13:48:58

标签: c# unit-testing

我希望这是可行的。我想使用单元测试来验证方法参数。 我想确保零不作为参数传递。

要测试的代码

 public class TestParameter
 {
    public double divide(int dividend, int divisor)
    {
        double quotient = 0;

        if (divisor!=0)
        quotient= dividend / divisor;

        return quotient;
    }       
}

单元测试

[TestClass]
public class UnitTestIntro
{
    [TestMethod]
    public void ZeroDivision()
    {
        TestParameter test = new TestParameter();
        double ans = test.divide(10, 0);
        //Assert.IsTrue();
        //I want to assert that divide does not allow 0 divisor as an argument
    }
}

2 个答案:

答案 0 :(得分:4)

我想使用单元测试来验证方法参数。

不,你不知道。那不是单元测试的目的。您的单元测试在开发过程中运行,但是在编译代码之后,您不会将测试与二进制文件一起部署。无论如何,不​​是为了消费。

不可能使用单元测试来做到这一点,不能替代可以放在单元测试中的这段代码:

public double divide(int dividend, int divisor)
{
    if (divisor == 0) throw new ArgumentException("Cannot be 0", nameof(divisor));

    // ...
}

您可以控制将单元测试传递给方法的内容,但是不能控制其他人在调用它时将通过什么方法。因此,验证必须在实际方法中进行,而不是在测试中进行。

答案 1 :(得分:2)

回答标题中的问题

单元测试是基于逻辑的测试。

测试方法参数没有意义,因为方法参数是用于构建自己的业务逻辑的仪器

您无法测试参数。

回答一个真实的问题

您需要在主要方法中验证参数,例如:

public class TestParameter
 {
    public double divide(int dividend, int divisor)
    {
        if (divisor == 0) // Validation
            throw new ArgumentException("Argument can't be '0'", nameof(divisor));

        return dividend / divisor;
    }       
}

然后在测试中对其进行测试:

[TestMethod]
public void ZeroDivision()
{
    TestParameter test = new TestParameter();
    Exception expectedException = null;
    try
    {
        double ans = test.divide(10, 0);
    }
    catch (System.Exception e)
    {
        expectedException = e;
    }
    Assert.IsNotNull(expectedException);
}