如何使用TestDriven.NET指定测试方法参数?

Tho*_*que 12 testing parameters nunit testdriven.net

我正在用NUnit和TestDriven.NET插件编写单元测试.我想为这样的测试方法提供参数:

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

如您所见,这些参数是私有数据,因此我不想对它们进行硬编码或将它们放在文件中.实际上我不想把它们写在任何地方,我希望每次运行测试时都会提示.

当我尝试运行此测试时,我在输出窗口中收到以下消息:

TestCase'MyProject.MyTests.TestLogin'未执行:未提供任何参数

所以我的问题是,我如何提供这些参数?我希望TestDriven.NET显示一个提示符,以便我可以输入值,但它没有...

对不起,如果我的问题看起来很愚蠢,答案可能很简单,但我在Google上找不到任何有用的东西......


编辑:我刚刚找到了办法,但这是一个肮脏的把戏......

    [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 }
            };
        }
    }
Run Code Online (Sandbox Code Playgroud)

我仍然对更好的解决方案感兴趣......

Nae*_*raz 22

使用TestCase属性.

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

  • +1.通过在TestCase()参数中处理依赖注入而不是在"方法中没有参数"的情况下,这比选择的答案要好得多.不幸的是,我不认为MS Unit Test有这样的东西,只是Nunit (2认同)
  • 这是正确而简短的答案.如果这是一个好的或坏的做法并不重要. (2认同)

Jur*_*uri 2

单元测试通常不应采用任何参数。您可以在测试本身中创建必要的数据。

  • 期望值
  • 您调用您想要测试的方法来传递必要的参数
  • 您将结果与预期值以及测试方法的返回值进行比较

MS 单元测试不允许将参数传递给测试。相反,您需要创建数据驱动的单元测试。尝试一下链接,它可能对您有帮助。

如我所说。我不会宣称将参数传递给单元测试本身是一种好的做法。


更新:我还年轻:)。请考虑 Sarfraz 关于如何将参数传递给 NUnit 测试的答案。