我正在用NUnit和TestDriven.NET插件编写单元测试。我想为这样的测试方法提供参数:
[TestFixture]
public class MyTests
{
[Test]
public void TestLogin(string userName, string password)
{
// ...
}
...
}正如您所看到的,这些参数是私有数据,所以我不想对它们进行硬编码或将它们放入文件中。实际上,我不想写anywhere,我希望每次运行测试时都会得到提示。
当我尝试运行这个测试时,我会在输出窗口中得到以下消息:
没有执行TestCase '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 }
};
}
}我仍然对更好的解决方案感兴趣..。
发布于 2011-09-13 09:57:22
使用TestCase属性。
[TestCase("User1", "")]
[TestCase("", "Pass123")]
[TestCase("xxxxxx", "xxxxxx")]
public void TestLogin(string userName, string password)
{
// ...
}发布于 2009-09-10 07:32:54
我认为您可以通过使用RowTest插件NUnit来解决这个问题,在这里可以找到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);
}
} 发布于 2012-02-19 18:02:59
我同意其他答案,即传递论点可能不是最佳实践,但硬编码凭据或服务器地址在某一时刻也可能发生变化。
受所建议的解决方案的启发,我只是阅读控制台输入,而不是使用输入框。参数保存在文件中。当启动测试时,文件将被重定向,并从任何测试用例运行之前应该调用的初始化函数中读取。
nunit tests.dll < test.config这避免了用户交互,并且应该由任何自动化脚本运行。缺点是密码仍然必须保存在某个地方,但至少可以在测试器机器上本地保存,并且很容易更改。
这适用于一个项目,其中包含测试的excel工作表(从定义上说不是单元测试)用于允许其他人为更大的服务器端项目创建测试用例,而无需更改任何代码。如果所有的测试用例都被强制放在一个巨大的excel表中,那就太糟糕了。也没有CI,只是在不同服务器上的许多测试环境。
https://stackoverflow.com/questions/1382313
复制相似问题