NUnit有一个名为Values的功能,如下所示:
[Test]
public void MyTest(
[Values(1,2,3)] int x,
[Values("A","B")] string s)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
这意味着测试方法将运行6次:
MyTest(1, "A")
MyTest(1, "B")
MyTest(2, "A")
MyTest(2, "B")
MyTest(3, "A")
MyTest(3, "B")
Run Code Online (Sandbox Code Playgroud)
我们现在正在使用MSTest,是否有任何相同的功能,以便我可以使用多个参数运行相同的测试?
[TestMethod]
public void Mytest()
{
// ...
}
Run Code Online (Sandbox Code Playgroud) 我发现TestCaseNUnit中的功能非常有用,可以快速指定测试参数,而无需为每个测试使用单独的方法.MSTest中有类似的东西吗?
[TestFixture]
public class StringFormatUtilsTest
{
[TestCase("tttt", "")]
[TestCase("", "")]
[TestCase("t3a4b5", "345")]
[TestCase("3&5*", "35")]
[TestCase("123", "123")]
public void StripNonNumeric(string before, string expected)
{
string actual = FormatUtils.StripNonNumeric(before);
Assert.AreEqual(expected, actual);
}
}
Run Code Online (Sandbox Code Playgroud) NUnit支持一项功能,您可以在其中指定一组数据输入,以便多次运行单元测试.
[RowTest]
[Row(1001,1,2,3)]
[Row(1,1001,2,3)]
[Row(1,2,1001,3)]
public void SumTests(int x, int y, int z, int expected)
{
...
}
Run Code Online (Sandbox Code Playgroud)
使用MSTest完成同类事物的最佳方法是什么?我找不到类似的属性集.
我知道我可以使用文件中的数据来驱动单元测试,例如csv或xml文件中的数据.
例如:
[TestMethod]
[DataSource(
"Microsoft.VisualStudio.TestTools.DataSource.CSV",
"Data.csv",
"Data#csv",
DataAccessMethod.Sequential)]
public void TestData() {}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法,而不是使用文件,我可以使用已经在内存中的数据结构来驱动测试.
就像是:
// this structure has the data to use in the unit test
var DataList = new List<string>();
[TestMethod]
[DataSource(
"Microsoft.VisualStudio.TestTools.DataSource.IEnumerable",
"DataList",
"DataList",
DataAccessMethod.Sequential)]
public void TestData() {}
Run Code Online (Sandbox Code Playgroud) 我希望在MSTest中长期看到的一个功能是参数化单元测试(PUT).我很高兴听到Intellitest 能够创建所述测试.我开始玩Intellitest,但我认为我对PUT的定义与微软不同.
当我想到"PUT"时,我认为NUnit中的TestCases或xUnit中的Theories.比我聪明的人似乎使用相同的术语.
有人能告诉我Intellitest是否真的能够以与NUnit或xUnit相同的方式创建PUT,或者这是一个重载术语的问题,这意味着Intellitest中的一件事,而另一部分是大多数其他测试框架的问题?谢谢.
c# unit-testing parameterized-unit-test visual-studio-2015 intellitest
特别是对于C#单元测试,如何针对各种输入或输入矩阵进行测试运行?
我经常有单元测试的情况做出输入矩阵,但通常可以通过检查输入列表来合理地解决.
最简单的情况是测试添加:
将对每个输入进行相同的测试(在该示例中,有4个输入,每个输入与一些预期输出相关联.
在简单的解决办法是:
object[] inputs = ...
foreach (var input in inputs)
// Put Assert here
Run Code Online (Sandbox Code Playgroud)
问题在于,当您运行测试时,除非您在消息日志中手动包含足够的详细信息,否则它不会告知哪个输入失败.
另一个解决方案是展开循环(如下所示).堆栈跟踪然后给出哪个输入失败,这允许再次运行单个输入的测试.
TestAddition(0, 0, 0);
TestAddition(1, 0, 1);
TestAddition(0, -1, -1);
TestAddition(1, -1, 0);
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是,像FitNess这样的解决方案似乎有助于此类案例,但也增加了很多复杂性,似乎不适合标准C#开发.
所有这些解决方案都不适用于灯具,因为[TestInitialize]所有输入都会调用一次.
你的解决方案是什么?
是否有一些我不知道的功能可以帮助那些案例?