首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用TestDriven.NET指定测试方法参数?

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

Stack Overflow用户
提问于 2009-09-05 02:52:19
回答 4查看 14K关注 0票数 12

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

代码语言:javascript
复制
[TestFixture]
public class MyTests
{
    [Test]
    public void TestLogin(string userName, string password)
    {
        // ...
    }

    ...
}

正如您所看到的,这些参数是私有数据,所以我不想对它们进行硬编码或将它们放入文件中。实际上,我不想写anywhere,我希望每次运行测试时都会得到提示。

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

没有执行TestCase 'MyProject.MyTests.TestLogin‘:没有提供任何参数

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

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

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

代码语言:javascript
复制
    [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 }
            };
        }
    }

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

EN

回答 4

Stack Overflow用户

发布于 2011-09-13 09:57:22

使用TestCase属性。

代码语言:javascript
复制
[TestCase("User1", "")]
[TestCase("", "Pass123")]
[TestCase("xxxxxx", "xxxxxx")]
public void TestLogin(string userName, string password)
{
    // ...
}
票数 22
EN

Stack Overflow用户

发布于 2009-09-10 07:32:54

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

您可以创建简单的数据驱动测试,其中测试数据由Row属性提供。下面是一个用不同参数一次又一次地运行的测试示例:

代码语言:javascript
复制
[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);
 }
} 
票数 2
EN

Stack Overflow用户

发布于 2012-02-19 18:02:59

我同意其他答案,即传递论点可能不是最佳实践,但硬编码凭据或服务器地址在某一时刻也可能发生变化。

受所建议的解决方案的启发,我只是阅读控制台输入,而不是使用输入框。参数保存在文件中。当启动测试时,文件将被重定向,并从任何测试用例运行之前应该调用的初始化函数中读取。

代码语言:javascript
复制
nunit tests.dll < test.config

这避免了用户交互,并且应该由任何自动化脚本运行。缺点是密码仍然必须保存在某个地方,但至少可以在测试器机器上本地保存,并且很容易更改。

这适用于一个项目,其中包含测试的excel工作表(从定义上说不是单元测试)用于允许其他人为更大的服务器端项目创建测试用例,而无需更改任何代码。如果所有的测试用例都被强制放在一个巨大的excel表中,那就太糟糕了。也没有CI,只是在不同服务器上的许多测试环境。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1382313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档