dr.*_*vil 42 unit-testing mstest data-driven-tests rowtest
我知道MSTest不支持RowTest和类似的测试.
什么是MSTests用户怎么办?如何在没有RowTest支持的情况下生活?
我已经看过DataDriven测试功能,但听起来有太大的开销,是否有任何第三方补丁或工具允许我进行RowTest类似的测试MSTest?
Tor*_*mod 38
[TestMethod]
Test1Row1
{
Test1(1,4,5);
}
[TestMethod]
Test1Row2
{
Test1(1,7,8);
}
private Test1(int i, int j, int k)
{
//all code and assertions in here
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个迟到的答案,但希望它可以帮助其他人.
我到处寻找一个优雅的解决方案,最后自己写了一个.我们在20多个项目中使用它,进行了数千次单元测试和数十万次迭代.永远不会错过一个节拍.
https://github.com/Thwaitesy/MSTestHacks
1)安装NuGet包.
2)从TestBase继承您的测试类
public class UnitTest1 : TestBase
{ }
Run Code Online (Sandbox Code Playgroud)
3)创建一个返回IEnumerable的Property,Field或Method
public class UnitTest1 : TestBase
{
private IEnumerable<int> Stuff
{
get
{
//This could do anything, get a dynamic list from anywhere....
return new List<int> { 1, 2, 3 };
}
}
}
Run Code Online (Sandbox Code Playgroud)
4)将MSTest DataSource属性添加到测试方法,指向上面的IEnumerable名称.这需要完全合格.
[DataSource("Namespace.UnitTest1.Stuff")]
public void TestMethod1()
{
var number = this.TestContext.GetRuntimeDataSourceObject<int>();
Assert.IsNotNull(number);
}
Run Code Online (Sandbox Code Playgroud)
最终结果: 3次迭代就像普通的DataSource :)
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MSTestHacks;
namespace Namespace
{
public class UnitTest1 : TestBase
{
private IEnumerable<int> Stuff
{
get
{
//This could do anything, get a dynamic list from anywhere....
return new List<int> { 1, 2, 3 };
}
}
[DataSource("Namespace.UnitTest1.Stuff")]
public void TestMethod1()
{
var number = this.TestContext.GetRuntimeDataSourceObject<int>();
Assert.IsNotNull(number);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们在VS2012 Update1中添加了对DataRow的支持.请参阅此博客以获取简介
在VS2012 Update1中,此功能目前仅限于Windows应用商店.在以后的版本中,它不受此限制.