c# - 如何在 Visual Studio 2010 中并行化数据驱动的单元测试?

标签 c# visual-studio unit-testing parallel-processing mstest

我知道常规的 MS-Test 单元测试可以通过在 .testresults 文件中指定 parallelTestCount 属性在多核机器上并行化(当然有警告)测试解决方案。像这样,

<Execution parallelTestCount="1">
    <TestTypeSpecific />
    <AgentRule name="Execution Agents"></AgentRule>
</Execution>

MSDN 上的更多信息:Executing Unit Tests in parallel on a multi-CPU/core machine

但是,我有一个数据驱动的测试,像这样,这只是一个测试,但输入来自 csv 并运行 1000 条记录通过相同测试。

[DeploymentItem("InputDataRows.csv"), Timeout(37800000), DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\InputDataRow.csv", "InputDataRow#csv", DataAccessMethod.Sequential)]                
[TestMethod]
public void RunProcessing()
{
    int userId = Convert.ToInt32(TestContext.DataRow[0].ToString());
    int connId = Convert.ToInt32(TestContext.DataRow[1].ToString());
    string xml = TestHelper.GetDataFromDb(userId, connId);
    a = doStuffA(xml); 
    b = doStuffB(xml);
    Assert.IsTrue(a == b);
}

因为这是一个缓慢的过程,所以我正在研究并行化这个单元测试。

Sequential enum属性上的只是它访问数据的方式,另一个选项是Random,它仍然是串行的而不是并行的。

最佳答案

为了并行化此单元测试,您需要 doStuffA()doStuffB() 才能对数据的子集进行操作(例如 block 甚至一次 csv 的一行)。如果您可以重构您的方法使其以这种方式运行,则可以利用任务或并行 foreach 循环,以便该测试并行执行。假设您的方法被重构为处理一行 csv,您可以这样做:

int userId = Convert.ToInt32(TestContext.DataRow[0].ToString());
int connId = Convert.ToInt32(TestContext.DataRow[1].ToString());
string xml = TestHelper.GetDataFromDb(userId, connId);
var rows = xml.Split('\n');

Parallel.ForEach(rows, (row) =>
{
    var a = doStuffOnRowA(row);
    var b = doStuffOnRowB(row);
    Assert.AreEqual(a, b);
});

关于c# - 如何在 Visual Studio 2010 中并行化数据驱动的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046362/

相关文章:

c# - 使用密码在 .net 中创建 zip 文件

visual-studio - 动态创建 RDLC xml 作为 VS2005 报表查看器输入的最佳方式?

c++ - Visual Studios 9 不一致的 Dll 链接

angular - 从一个来源加载所有组件和提供程序以进行 Angular 单元测试

C#:在类清理期间捕获测试失败

ios - 如何使用异步调用对 @IBAction 进行单元测试

c# - 为什么 var 在 "foreach (var row in table.Rows)"中评估为 System.Object ?

c# - Windows 窗体程序中的多个 UI

c# - 暂停和恢复线程

visual-studio - Visual Studio 中没有 .Net 框架的 Angular 2 项目