簡體   English   中英

單元測試方法參數

[英]Unit Testing Method Arguments

我希望這是可行的。 我想使用單元測試來驗證方法參數。 我想確保零不會作為參數傳遞。

要測試的代碼

 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
    }
}

我想使用單元測試來驗證方法參數。

不,你沒有。 這不是單元測試的目的。 您的單元測試在開發期間運行,但在編譯代碼后,您不會使用二進制文件部署測試。 反正不是用來消費的。

使用單元測試是不可能做到這一點的,您可以在單元測試中使用以下代碼替代:

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

    // ...
}

您可以控制單元測試傳遞給您的方法的內容,但您無法控制其他人調用它時將傳遞的內容。 因此,驗證必須在實際方法中進行,而不是在您的測試中進行。

回答標題中的問題

單元測試是一種基於邏輯的測試。

測試方法的參數沒有任何意義,因為方法的參數是一個工具,以建立自己的業務邏輯。

你不能測試參數。

回答一個真實的問題

您需要驗證 main 方法中的參數,例如:

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM