标签: data-driven-tests

NUnit中的数据驱动测试?

在MSTest中,您可以执行以下操作:

[TestMethod]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", 
            "testdata.csv", "testdata#csv", DataAccessMethod.Sequential)]
public void TestSomething()
{
    double column1 = Convert.ToDouble(TestContext.DataRow["column1"]);
    ...
    Assert.AreEqual(...);
}
Run Code Online (Sandbox Code Playgroud)

NUnit 2.5中的等效代码是什么?

c# nunit .net-4.0 data-driven-tests nunit-2.5

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

数据驱动的DUnit测试

DUnit通常的工作方式是编写一些已发布的方法,而DUnit将它们作为测试运行.我想做的是有点不同.我想在运行时根据数据创建测试.我正在尝试测试处理输入文件的特定模块以创建输出文件.我有一组测试输入文件,其中包含相应的已知良好输出文件.我们的想法是为每个输入文件动态创建一个测试,处理输入并根据已知的好输出检查输出.

然而,这里的实际数据来源并不重要.困难在于使DUnit以数据驱动的方式运行.为了解决这个问题,假设数据源只是一个随机数生成器.这是一个解决困难核心的示例具体问题:

在运行时创建一些测试对象(TTestCase或其他),比如10个,每个测试对象

  1. 在运行时从随机生成的整数中命名.('name'我的意思是测试运行树中出现的测试名称.)
  2. 基于随机整数传递或失败.通过甚至,奇怪的失败.

从DUnit的设计来看,它的设计看起来具有足够的灵活性,使这些事情成为可能.我不确定它是不是.我试图通过继承TAbstractTest和ITest来创建我自己的测试类,但是一些关键的方法无法访问.我也尝试从TTestCase继承,但是这个类与运行已发布方法的想法密切相关(并且测试以方法命名,所以我不能只调用一个,比如'go',因为那时候我所有的测试都会被称为'go',我希望我的所有测试都被单独命名).

或者,是否有一些替代DUnit可以做我想要的?

delphi dunit dynamic data-driven-tests

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

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

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

数据驱动的单元测试 - CSV编码问题?

我有以下CSV文件,用于我的数据驱动单元测试:

File;expected
Resources.resx;default
Resources.de.resx;de
AttachmentDetail.ascx.it.resx;it
SomeOtherFile.rm-CH.resx;rm-CH
Run Code Online (Sandbox Code Playgroud)

"文件"和"预期"是标题.但是,如果我想在代码中得到"文件"列

TestContext.DataRow["File"].ToString();
Run Code Online (Sandbox Code Playgroud)

我收到了错误

System.ArgumentException:列'File'不属于表..

当我通过测试方法属性将CSV文件添加到现有测试用例时,似乎"文件"列在其名称前面有一些奇怪的符号,就像编码问题一样.但是,如果我用记事本,Notepad ++甚至TextMate(在Mac上)打开CSV文件,我没有看到任何这样的迹象,我无法摆脱它们.

有人可以给我一个关于这个问题的建议吗?

c# unit-testing mstest data-driven-tests

8
推荐指数
2
解决办法
4284
查看次数

MSTest中数据驱动测试的问题

我正在尝试使用MSTest/Selenium在C#中使用数据驱动测试.以下是我尝试设置的一些代码的示例:

[TestClass]
public class NewTest
{
    private ISelenium selenium;
    private StringBuilder verificationErrors;
    [DeploymentItem("GoogleTestData.xls")]
    [DataSource("System.Data.OleDb",
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=GoogleTestData.xls;Persist Security Info=False;Extended Properties='Excel 8.0'",
    "TestSearches$", DataAccessMethod.Sequential)]

    [TestMethod]
    public void GoogleTest()
    { 
        selenium = new DefaultSelenium("localhost", 4444, "*iehta", http://www.google.com);
        selenium.Start();
        verificationErrors = new StringBuilder();
        var searchingTerm = TestContext.DataRow["SearchingString"].ToString();
        var expectedResult = TestContext.DataRow["ExpectedTextResults"].ToString();

    ...
Run Code Online (Sandbox Code Playgroud)

这是我的错误:错误3非静态字段,方法或属性'Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.DataRow.get'E:\ Projects\SeleniumProject\SeleniumProject\MaverickTest.cs 32需要对象引用33 SeleniumProject

该错误强调了两个语句的"TestContext.DataRow"部分.我真的一直在努力解决这个问题,谢谢!

c# selenium automated-tests mstest data-driven-tests

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

使用谷歌测试进行数据驱动的单元测试

我目前正在使用googles单元测试框架为嵌入式应用程序编写单元测试.现在我的老板很不高兴我测试的数据(即我调用被测试类的方法的值)在测试中是硬接线的.他要求从文件中读取此数据.他的论点是,为一个以前被遗忘的角落案件添加另一个测试会更容易.我不是单位测试的经验,但到目前为止,我不是这样做的.所以我试着弄清楚最好的方法是什么 - 即使这样做是个好主意.我很快就遇到了DDT(数据驱动测试)方法.

谷歌单元测试框架有一个他们称之为" 价值参数化测试 "的功能.有了它,我的测试夹具成为模板类,我可以传入参数.但是,我看到了一些问题:

  • 我目前每个班级都有一个夹具正在测试中.但是我需要每个测试方法都有一个夹具,因为每个方法都需要一组不同的参数.这将是一项额外的工作.
  • 在我看来,我只能传入一个参数.因为我的测试需要几个(我的方法的所有参数加上预期的结果)这需要我传递类似矢量或地图的东西.同样,这种构造和检索听起来像很多工作.

我会想象像谷歌测试框架那样成熟的东西让它变得更容易.但是,他们写道

值参数化测试很方便[当]你想通过各种输入(又称数据驱动测试)测试你的代码.此功能很容易被滥用,所以请在锻炼时锻炼你的良好感觉!

此外还有这篇博客文章TotT:Data Driven Traps,也警告我(滥用)数据驱动的单元测试.

所以我的问题归结为:

  • 进行数据驱动的单元测试是个好主意吗?
  • 如何使用谷歌测试框架进行数据驱动的单元测试

我并不是真的要googletest,而且基本上可以自由选择任何我喜欢的框架.

编辑

我在googletest常见问题解答的FAQ条目中找到了以下声明

一般来说,Google Test对数据驱动的测试还没有很好的支持.我们希望很快能够在这方面做出改进.

c++ testing unit-testing googletest data-driven-tests

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

单列日期表问题:Groovy:日期变量'_'需要声明为方法参数

我有一个非常简单的测试:

def "setContent_activity_finished"(Status editStatus) {
    // Variables.........................

    given:
    activity.getStatus() >> editStatus.toString()

    when:
    handler.setContent(activityId,jsonString)

    then:
    0*view.appendPossible(_)

    where:
    editStatus       |_
    FINISHED         |_
    CANCELED         |_
}
Run Code Online (Sandbox Code Playgroud)

根据文档http://spock-framework.readthedocs.org/en/latest/data_driven_testing.html 数据表必须至少有两列.单列表可以写成:

where:
a | _
1 | _
7 | _
0 | _
Run Code Online (Sandbox Code Playgroud)

我遵循这条规则,但得到的错误如下图所示:

Groovy:Date variable '_' needs to be declared as method parameter
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

所以,请告诉我这里的问题是什么?

data-driven-tests spock

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

有没有更好的方法将动态输入内联传递给DataTestMethod?即如何以编程方式为数据驱动的测试创建测试输入

多年来我一直在寻找这个,我想我终于在"MSTest V2"中找到了一个真正的方法(意思是.netcore附带的那个,并且在Visual Studio 2017中才能真正正确处理).请参阅我的解决方案.

这对我来说解决的问题是我的输入数据不容易序列化,但是我的逻辑需要用许多这些输入进行测试.有很多原因可以解释为什么这样做更好,但那对我来说是个噱头; 我被迫进行了一次巨大的单元测试,并通过我的输入进行for循环.到现在.

c# mstest data-driven-tests .net-core

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

在 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
查看次数

MSTest - 可以在 TestInitialize 和 TestCleanup 中访问 [DataRow] 值吗?

我正在进行这样的测试:

[DataTestMethod]
[DataRow("example1")]
[DataRow("example2")]
public void Test_Example(string name)
{
  // test logic
}
Run Code Online (Sandbox Code Playgroud)

[TestCleanup]我们的日志系统目前在基础中以单一方法实现[TestClass]

我可以通过属性访问测试方法的名称TestContext,但不包含有关数据行参数的任何信息。

是否有可能以某种方式获得这些值?在[TestCleanup]或在[TestInitialize]就可以了。

c# mstest data-driven-tests

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