相关疑难解决方法(0)

如何在MSTest中运行具有多个参数的测试方法?

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)

c# nunit unit-testing mstest vs-unit-testing-framework

129
推荐指数
7
解决办法
12万
查看次数

MSTest是否与NUnit的TestCase相当?

我发现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 mstest rowtest testcase

100
推荐指数
4
解决办法
4万
查看次数

MSTest等效于NUnit的参数化测试?

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完成同类事物的最佳方法是什么?我找不到类似的属性集.

nunit unit-testing mstest parameterized-unit-test

46
推荐指数
3
解决办法
2万
查看次数

有没有办法使用已经在内存中的数据来驱动单元测试?

我知道我可以使用文件中的数据来驱动单元测试,例如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)

c# mstest data-driven-tests visual-studio-2010

9
推荐指数
1
解决办法
1969
查看次数

使用Visual Studio 2015 Intellitest进行参数化单元测试

我希望在MSTest中长期看到的一个功能是参数化单元测试(PUT).我很高兴听到Intellitest 能够创建所述测试.我开始玩Intellitest,但我认为我对PUT的定义与微软不同.

当我想到"PUT"时,我认为NUnit中的TestCasesxUnit中的Theories.比我聪明的人似乎使用相同的术语.

有人能告诉我Intellitest是否真的能够以与NUnit或xUnit相同的方式创建PUT,或者这是一个重载术语的问题,这意味着Intellitest中的一件事,而另一部分是大多数其他测试框架的问题?谢谢.

c# unit-testing parameterized-unit-test visual-studio-2015 intellitest

7
推荐指数
2
解决办法
6572
查看次数

单元测试一些输入的各种foreach

特别是对于C#单元测试,如何针对各种输入或输入矩阵进行测试运行?

我经常有单元测试的情况做出输入矩阵,但通常可以通过检查输入列表来合理地解决.

最简单的情况是测试添加:

  • 0 + 0 = 0
  • 1 + 0 = 1
  • 0 + -1 = -1
  • 1 + -1 = 0

将对每个输入进行相同的测试(在该示例中,有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]所有输入都会调用一次.

你的解决方案是什么?

是否有一些我不知道的功能可以帮助那些案例?

c# foreach unit-testing

1
推荐指数
1
解决办法
1474
查看次数