标签: data-driven-tests

MSTest 数据驱动测试可以并行运行吗?

几年前为 VisualStudio2010 提出了类似的问题,但从未在这里回答:

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

我希望这个功能现在可能存在于 VS2012 中。

我的情况和上面一样,我有一个数据驱动的登录测试,它为多个客户端运行相同的测试。

我通过在 ClassInitialize 和 TestInitialize 中触发线程,并在清理之前等待所有测试完成,尝试了不同的线程解决方案。我尝试过的任何方法都不适用于这些数据驱动的测试。

我担心尝试这与 MSTest 与 dd 测试的工作方式从根本上是错误的。基本上,我发现下一个数据集在 TestCleanup 完成之前不会运行,并且 TestCleanup 不会在没有完成测试并记录测试结果的情况下完成。所以基本上,在记录了之前的测试结果之前,不能开始下一个测试。真的吗?或者有没有办法使用 MSTest 框架并行化这些?

谢谢!

c# mstest data-driven-tests parallel-testing visual-studio-2012

6
推荐指数
0
解决办法
763
查看次数

在 C# 测试中从 Json 文件中读取和映射数据

我试图在自动化测试中使用来自 JSON 文件的数据。因为我找到了如何使用它,感谢@jeroenh,我以正确的方式离开了这里。我希望,它会对某人有所帮助。

-- JSON 文件 (testDataCo.Json):

{
  "DataCo": [
    {        
      "url": "https://dodo.com",
      "user": "test@test.com",
      "password": "uawe",       
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

-- 将数据确定为 JSON 文件的类

sing System.Globalization;
using Newtonsoft.Json.Converters;
using System.IO;
using Newtonsoft.Json;

namespace DataFromJson
{ 

    public partial class DataJson
    {
        [JsonProperty("DataCo")]
        public DataCo[] DataCo { get; set; }
    }

    public partial class DataCo
    {       
        [JsonProperty("url")]
        public string Url { get; set; }   

        [JsonProperty("user")]
        public string User { get; set; }

        [JsonProperty("password")]
        public string Password { get; set; }      
    }

    public …
Run Code Online (Sandbox Code Playgroud)

c# selenium json nunit data-driven-tests

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

如何引用嵌入式数据文件进行数据驱动的单元测试?

这是我的场景,我想进行数据驱动的单元测试,并且与环境无关我想在我的程序集中嵌入数据文件.我怎样才能在单元测试的DataSourceAttribute中引用呢?

我正在尝试使用Microsoft Jet OleDB提供程序访问Excel 2003文件.当文件在硬盘驱动器中时,单元测试工作正常,但在我尝试访问嵌入式组装文件时则不行.这是我的例子:

原版的

[DeploymentItem("IHRM.Infrastructure.EFRepositories.Tests\DataDriven.xls"),DataSource("System.Data.OleDb","Provider = Microsoft.Jet.OLEDB.4.0; Data Source = | DataDirectory |\DataDriven.xls;扩展属性= \"Excel 8.0 \"","Sheet1 $",DataAccessMethod.Sequential),TestMethod]

建议

[DataSource("System.Data.OleDb","Provider = Microsoft.Jet.OLEDB.4.0; Data Source = "这里放什么" ;扩展属性= \"Excel 8.0 \"","Sheet1 $",DataAccessMethod. Sequential),DeploymentItem("IHRM.Infrastructure.EFRepositories.Tests\DataDriven.xls"),TestMethod]

.net unit-testing mstest data-driven-tests

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

为什么数据驱动单元测试在vs2012中在vs2010中正常工作时失败了?

我有一些数据驱动的单元测试在Visual Studio 2010中运行得很好.这些测试使用以下模式实现.

[TestMethod()]
[DeploymentItem("path_to_data_dir_relative_to_solution\\my_data.xml")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\my_data.xml", "Token", DataAccessMethod.Sequential)]
public void MyTestMethod()
{
    // Arrange
    const string EXPECTED_PARAM_NAME = "table";
    string data = TestContext.DataRow["Data"].ToString();
    var sut = new MyClassUnderTest();

    // Act
    sut.DoSomething(data);

    // Assert
    Assert.IsTrue(sut.DidSomething);
}
Run Code Online (Sandbox Code Playgroud)

这是我的解决方案结构.

  • MySolutionFolder
    • MyTestProjectFolder
    • MyTestDataFolder
      • my_data.xml

当我在Visual Studio 2012中运行相同的测试时,它们失败并显示以下错误消息.

结果消息:单元测试适配器无法连接到数据源或读取数据.有关解决此错误的详细信息,请参阅MSDN Library中的"数据驱动单元测试疑难解答"(http://go.microsoft.com/fwlink/?LinkId=62412).错误详细信息:对象引用未设置为对象的实例.

为什么我的单元测试突然失败了?

c# data-driven-tests visual-studio-2010 deploymentitem visual-studio-2012

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

如何使用多个数据源运行单元测试?

我找不到在使用不同DataSource同一测试类中运行不同单元测试的方法.

以下是测试类的示例:

  namespace Calc.Tests
  {
     [TestClass]
     public class CalcTests
     {
        private static TestContext Context { get; set; }

        [ClassInitialize]
        public static void ClassInitialize(TestContext context)
        {
           Context = context;
        }

        [TestMethod]
        [DeploymentItem("AddedValues.csv")]
        [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", @"|DataDirectory|\AddedValues.csv", "AddedValues#csv", DataAccessMethod.Sequential)]
        public void Add_UsingValuesWithinCsv()
        {
           Calc calc = new Calc();

           // Arrange
           int firstValue = Convert.ToInt32(Context.DataRow["firstValue"]);
           int secondValue = Convert.ToInt32(Context.DataRow["secondValue"]);
           int expectedResult = Convert.ToInt32(Context.DataRow["expectedResult"]);

           // Act
           int result = calc.Add(firstValue, secondValue);

           // Assert
           Assert.AreEqual<int>(result, expectedResult);
        }

        [TestMethod]
        [DeploymentItem("AddedValues.xml")]
        [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", @"|DataDirectory|\AddedValues.xml", …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing mstest datasource data-driven-tests

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

通过API从TFS检索数据驱动测试的结果

我有一些数据驱动的单元测试,基本完成如下所述:

http://msdn.microsoft.com/en-us/library/ms182527.aspx

对于给定的测试运行,我可以得到如下结果:

IOrderedEnumerable<ITestCaseResult> runDetails = WebApiApplication.TeamProject.TestRuns.Find(testRunId).QueryResults().OrderBy(r=>r.Outcome);
Run Code Online (Sandbox Code Playgroud)

在每个ITestCaseResult中,我可以通过以下方式获取错误消息:

testCaseResult.ErrorMessage
Run Code Online (Sandbox Code Playgroud)

太棒了,但是当有数据驱动测试的结果时,我无法弄清楚如何获得迭代结果.它们出现在生成的.trx文件中,但不在ITestCaseResult中的任何位置.

在此输入图像描述

有关如何通过API获取它们的任何想法?

tfs data-driven-tests

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

用于数据驱动单元测试的嵌套XML

我的目标是在每个单元测试迭代中都有"嵌套"数据.我想这样做,所以我可以有一组要调用的数据,以及一系列动作(由字符串描述),然后在我的测试中解释和执行.我目前通过测试资源管理器在VS2013中运行测试,使用非嵌套数据(例如,无数据/操作子项组).

例如,我的数据可能是:

<TestData>
  <Iteration>
    <Data>
      <LoginName>admin</LoginName>
      <Password>admin</Password>
    </Data>
    <Actions>
      <Action>EnterText_LoginName</Action>
      <Action>EnterText_Password</Action>
      <Action>ClickButton_Login</Action>
    </Actions>
  </Iteration>
</TestData>
Run Code Online (Sandbox Code Playgroud)

我想按照正常的非嵌套测试(dataElements["element"])访问Data中的元素,但是,我希望在列表中包含Actions元素.我试过以下但没有成功:

var data = TestContext.DataRow.GetChildRows("Iteration_Data");
var actions = TestContext.DataRow.GetChildRows("Iteration_Actions");
Run Code Online (Sandbox Code Playgroud)

GetChildRows似乎是正确的方法,但我无法在返回的对象中看到任何类似于我的XML元素的数据 - 我只得到1个DataRow具有ItemArray3个值(0,{},0)的对象.如何检索我的Action元素列表,以便我可以访问该文本:

  • "EnterText_LoginName"
  • "EnterText_Password"
  • "ClickButton_Login"

xml unit-testing data-driven-tests visual-studio-2013

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

数据驱动的测试与模拟

我有一个接收ContactForm对象和收件人地图的方法.所以我写了以下规范,根据表单的查询,返回Map中正确的收件人:

def "Correct recipients for first inquiry"() {
    setup:
    def form = Mock(ContactForm)
    form.getInquiry() >> "Subject 1"

    expect:
    sut.getRecipients(form, recipientsTestMap) == ["recipient1"]
}

def "Correct recipients for second inquiry"() {
    setup:
    def form = Mock(ContactForm)
    form.getInquiry() >> "Subject 2"

    expect:
    sut.getRecipients(form, recipientsTestMap) == ["recipient2"]
}

// and so on ...
Run Code Online (Sandbox Code Playgroud)

是否有数据驱动的方式来做到这一点?不幸的是,没有传递表单,但查询字符串本身现在不是一个选项,因为这将需要大量重构.我很好奇Spock是否有可能做这个数据驱动,尽管在每次测试之前必须更改模拟.

groovy unit-testing data-driven-tests spock

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

在 JUnit 中参数化测试方法,而不仅仅是整个类

我想在 JUnit 中创建一个数据驱动的参数化方法

我看到的例子对整个进行了参数化。

例如

@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
Run Code Online (Sandbox Code Playgroud)

但是,我想参数化单个测试方法,而不是整个

在 TestNG 中,类似的东西看起来像这样:

@DataProvider(name = "test1")
public static Object[][] primeNumbers() {
   return new Object[][] {{2, true}, {6, false}, {19, true}, {22, false}, {23, true}};
}

// This test will run 4 times since we have 5 parameters defined
@Test(dataProvider = "test1")
public void testPrimeNumberChecker(Integer inputNumber, Boolean expectedResult) {
   System.out.println(inputNumber + " " + expectedResult);
   Assert.assertEquals(expectedResult,
   primeNumberChecker.validate(inputNumber));
}
Run Code Online (Sandbox Code Playgroud)

JUnit 中可能有这样的事情吗?

编辑:

  1. 最优雅/干燥的方法是使用单个方法级注释 …

java junit testng data-driven-tests testng-dataprovider

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

是否有更简单的方法来处理具有太多条件的方法的单元测试?

我有一个方法,其中有很多条件:

public bool IsLegalSomething(Order order)
{
    var item0 = order.Items.SingleOrDefault(x => x.ItemCode == "ItemCode0");
    var item1 = order.Items.SingleOrDefault(x => x.ItemCode == "ItemCode1");
    ...
    var itemN = order.Items.SingleOrDefault(x => x.ItemCode == "ItemCodeN");

    return ((item0.Status == Status.Open) && (item1.Status == Status.Closed)
         && ...
         && (itemN.Status == Status.Canceled));
}
Run Code Online (Sandbox Code Playgroud)

我想对这个函数进行单元测试,但是条件太多了,如果考虑每一个组合,单元测试的数量就会变得疯狂。该 return 语句中有 16 个条件,并且由于每个条件都是 true/false,因此我需要检查 2^16 种不同的组合。我真的需要在此处创建 2^16 个不同的单元测试以确保利用每个条件吗?请注意,这是一个简单的例子。由于法律要求,我的一些功能具有复杂的条件:

return (condition0 && condition1 && (condition2 || condition3)
     && (condition4 || (condition5 && condition6)) ...)
Run Code Online (Sandbox Code Playgroud)

通过我的一些函数的数学计算,条件可以产生的不同组合的数量是数百万种!我研究了数据驱动单元测试(DDUT)以及参数化单元测试(PUT),但这只是使单元测试成为“填空”风格。我仍然需要提供所有的各种组合和预期的结果!例如:

// Parameterized Unit Test
[TestCase(..., Result = true)] …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing data-driven-tests parameterized-unit-test

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