簡體   English   中英

如何使用 TestDriven.NET 指定測試方法參數?

[英]How do I specify test method parameters with TestDriven.NET?

我正在使用 NUnit 和 TestDriven.NET 插件編寫單元測試。 我想為這樣的測試方法提供參數:

[TestFixture]
public class MyTests
{
    [Test]
    public void TestLogin(string userName, string password)
    {
        // ...
    }

    ...
}

如您所見,這些參數是私有數據,所以我不想對它們進行硬編碼或將它們放在文件中。 其實我不想把它們寫在任何地方,我希望每次運行測試時都能得到提示。

當我嘗試運行此測試時,我在 output window 中收到以下消息:

未執行測試用例“MyProject.MyTests.TestLogin”:未提供 arguments

所以我的問題是,如何提供這些參數? 我希望 TestDriven.NET 顯示提示以便我可以輸入值,但它沒有...

對不起,如果我的問題看起來很愚蠢,答案可能很簡單,但我在谷歌上找不到任何有用的東西......


編輯:我剛剛找到了一種方法,但這是一個骯臟的把戲......

    [Test, TestCaseSource("PromptCredentials")]
    public void TestLogin(string userName, string password)
    {
        // ...
    }

    static object[] PromptCredentials
    {
        get
        {
            string userName = Interaction.InputBox("Enter user name", "Test parameters", "", -1, -1);
            string password = Interaction.InputBox("Enter password", "Test parameters", "", -1, -1);
            return new object[]
            {
                new object[] { userName, password }
            };
        }
    }

我仍然對更好的解決方案感興趣......

使用TestCase屬性。

[TestCase("User1", "")]
[TestCase("", "Pass123")]
[TestCase("xxxxxx", "xxxxxx")]
public void TestLogin(string userName, string password)
{
    // ...
}

我認為你可以通過使用NUnit的RowTest插件來解決這個問題,這里有http://www.andreas-schlapsi.com/2008/01/29/rowtest-extension-120/

您可以創建簡單的數據驅動測試,其中測試數據由[Row]屬性提供。 所以這是一個使用不同參數反復運行的測試示例:

[TestFixture]
public class RowTestSample
{
 [RowTest]
 [Row( 1000, 10, 100.0000)]
 [Row(-1000, 10, -100.0000)]
 [Row( 1000, 7, 142.85715)]
 [Row( 1000, 0.00001, 100000000)]
 [Row(4195835, 3145729, 1.3338196)]
 public void DivisionTest(double numerator, double denominator, double result)
 {
    Assert.AreEqual(result, numerator / denominator, 0.00001);
 }
} 

單元測試通常不應采用任何參數。 您可以在測試中創建必要的數據。

  • 預期值
  • 您調用要測試的方法傳遞必要的參數
  • 您將結果與預期值和測試方法的返回值進行比較

MS單元測試不允許將參數傳遞給測試。 相反,您需要創建Datadriven單元測試 嘗試鏈接,它可能會幫助你。

如我所說。 我不會聲明將參數傳遞給單元測試本身的良好實踐。


更新:我還年輕:)。 考慮Sarfraz的答案,而不是如何將參數傳遞給NUnit測試。

創建一個 class 並將所需變量的詳細信息存儲在 const 中。 注意:如果您將變量創建為 static,那么它將無法在 Nunit 框架中工作。

public Class Credential
{
    public const string PUBLIC_USER = "PublicUser@gmail.com";
    public const string PASSWORD= "password123";
}

[Test]
[TestCase(Credential.PUBLIC_USER, Credential.PASSWORD)]
public void VerifyLogin(string username, string password)
 

我同意其他答案,傳遞參數可能不是最佳實踐,但硬編碼憑證或服務器地址都不會在某些時候發生變化。

受建議的解決方案的啟發,我只是閱讀控制台輸入而不是使用輸入框。 參數保存在文件中。 在開始測試時,文件被重定向並從一些初始化函數中讀取,該函數應在任何測試用例運行之前調用。

nunit tests.dll < test.config

這可以避免用戶交互,並且應該可以由任何自動化腳本運行。 缺點是密碼仍然需要保存在某個地方,但至少它可以保存在測試機上的本地,並且很容易更改。

這是一個項目,其中包含測試的excel表(不是定義中的單元測試)用於讓其他人為更大的服務器端項目創建測試用例而不更改任何代碼。 如果所有的測試案例都必須強制放在一個巨大的excel表中,那將會很糟糕。 此外,沒有CI,只有不同服務器上的許多測試環境。

暫無
暫無

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

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