如何使用It.IsIn(someRange)对多个字段进行POCO属性组合的迭代?

Dzianis Yafimau

我有一个POCO课程:

public class SomeEntity {
  public int Id { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

我想使用SomeEntity类中的不同值来测试其他一些类。问题是我需要测试许多属性的不同组合。例如:

  1. ID = 1,FirstName = null,LastName =“ Doe”
  2. Id = 1,FirstName =“”,LastName =“ Doe”
  3. Id = 1,FirstName =“ John”,LastName =“ Doe”
  4. ID = 1,名字=空,姓氏=“”
  5. 等等

因此,在每个测试中,我都想像这样创建测试对象:

// test that someOtherObject always return the same result 
// for testObject with ID = 1 and accepts any values from range of 
// values for FirstName and LastName

var testObject = new SomeEntity {
  Id = 1, // this must be always 1 for this test
  FirstName = It.IsIn(someListOfPossibleValues), // each of this values must be accepted in test
  LastName = It.IsIn(someListOfPossibleValues) // each of this values must be accepted in test
}

var result = someOtherObject.DoSomething(testObject);

Assert.AreEqual("some expectation", result);

我不想使用nunit TestCase,因为会有很多组合(巨大的矩阵)。

我尝试在调试中运行此测试,它仅使用列表中的第一个值进行一次DoSomething调用。

问题:如何组合所有可能的值?

帕特里克·奎克

您使用It.IsIn不正确;仅用于匹配参数时,即Verify用于检查值是否在一组可能值中的Setup调用中,或用于控制Moq响应方式的调用中。并非旨在用于以某种方式生成一组测试数据。这正是NUnit的的ValuesAttributeValueSourceAttribute是。

关于由于组合太多而反对使用NUnit的原因,是因为您不想编写所有组合还是因为不想进行太多测试?如果是前者,则使用NUnit的属性,CombinatorialAttribute使NUnit完成创建所有可能测试的工作。像这样:

[Test]
[Combinatorial]
public void YourTest(
    [Values(null, "", "John")] string firstName, 
    [Values(null, "", "Doe")] string lastName)
{
    var testObject = new SomeEntity {
        Id = 1, // this must be always 1 for this test
        FirstName = firstName,
        LastName = lastName
    };

    var result = someOtherObject.DoSomething(testObject);

    Assert.AreEqual("some expectation", result);
}

该测试将运行9次(2个参数中的每个参数都有3个数据,所以3 * 3)。请注意,组合是默认设置。

但是,如果您仅对结果中的测试数量表示反对,那么请专注于您实际想要测试和编写这些测试的内容,而不是用所有可能的值来应对。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用LINQ将多个字段组合为一个字段

如何在多个字段的组合上添加组带?

如何使用SelectTokens查询多个字段?

使用多个计数/总和跨多个字段进行透视

如何使用加权函数对多个字段上的搜索结果进行排序?

MongoDb-如何使用Java对集合中的多个字段进行排序和搜索

如何使用查询语法在Lucene中跨多个字段进行搜索?

如何使用Go Olivere / Elastic基于多个字段进行排序

如何使用QuerySets和MySql“全文搜索”在多个字段中进行Django搜索?

如何使用比较器对集合中的多个字段进行排序?

如何在Scala中的多个字段上使用混合的升序和降序对rdd进行排序

如何在Spring Data Web中使用多个字段desc和asc进行排序?

如何使用 DateTimeStamp 在 For 循环中迭代多个组合

如何按多个字段对子文档数组进行分组?

如何在弹性搜索中进行多个字段匹配

如何在多个字段上对 ArrayList 进行排序

Filemaker 12如何进行多个字段的计算

如何使用dplyr对多个字段使用select

使用SQL跨多个字段对输出进行分组

在多个字段上使用$ match进行汇总和$ lookup

使用PDO从多个字段进行高级搜索

Mongoose:使用 $or 进行跨多个字段的部分匹配

在Python中使用熊猫对多个字段进行索引

如何最好地在多个模型中使用多个字段?

如何将一个字段与mongodb中的组合字段进行比较

如何使用 MongoDB 中的 2 个字段的总和进行排序

如何使用一个字段进行mongoexport

如何使用SQL比较多个字段?

如何使用 HQL 一次更新多个字段?