我写的单元测试和呢TestDriven.NET 插件。我想提供了参数,以测试方法是这样的:

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

    ...
}

正如你可以看到,这些参数是私人数据,所以我不想来硬代码,他们或者把它们放在一个文件。实际上我不想把它们写 任何地方, 我希望提示我每次运行测试。

当我试试运行这个测试,我会得到以下消息在输出窗口:

测试用例'MyProject.MyTests.TestLogin'不执行:没有参数提供了

所以我的问题是,如何提供这些参数?我预期的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 }
            };
        }
    }

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

有帮助吗?

解决方案

单元测试通常应不采取任何参数。 你创造必要的数据内测试本身。

  • 期望值
  • 你叫你的方法你想测试的通过必要的参数
  • 你比较的结果与期望值并返回自己的测试方法

MS单元的测试不允许通过的参数,以测试。而不是你需要创造 Datadriven单元的测试.尝试的链接,它可以帮助你。

正如我所提到的。我不会声明通过的参数的单元测试本身的良好做法。


更新: 我年轻:).考虑Sarfraz的答案,而不是如何通过参关的测试。

其他提示

使用测试用例属性。

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

我想你可以通过使用RowTest插件NUnit的在这里找到解决这个问题的 http://www.andreas-schlapsi.com/2008/01/29/rowtest-extension-120/

可以创建简单的数据驱动测试,其中测试数据由[行]属性中提供。因此,这里是用不同的参数运行一遍一遍测试的示例:

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

我与其他答案同意,传递参数可能不是最好的做法,但也不是硬编码,可能在某些时候更改凭证或服务器地址。

由所讨论的建议的解决方案的启发,我简单地读取,而不是使用输入框控制台输入。这些参数保存在一个文件中。当开始测试时,该文件被重定向和从一些初始化功能的任何测试运行前时应调用读取。

nunit tests.dll < test.config

这避免了用户交互,并应通过任何自动化脚本可运行的。不足之处是密码还是在某处被保存,但至少它可以保存在测试机上本地和容易变化。

这是一个项目,其中含有测试(根据定义不是单元测试)的Excel工作表被用来让别人不改变任何代码创建测试用例一个更大的服务器侧项目。这本来是坏的,如果所有测试用例必须用一个巨大的Excel工作表被强迫。还没有CI,不同服务器上的只是众多测试环境。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top