【问题标题】:test all combinations of parameters excluding one specific combination测试除一种特定组合外的所有参数组合
【发布时间】:2017-11-28 14:43:49
【问题描述】:

我想创建测试所有参数组合的测试,不包括会产生不同预期结果的组合。

到目前为止,我想出了

[TestCase(false, false, ExpectedResult = false)]
[TestCase(false, true, ExpectedResult = false)]
[TestCase(true, false, ExpectedResult = false)]
[TestCase(true, true, ExpectedResult = true)]
public bool Test(bool paramA bool paramB)
{
    var target = new MyComand(paramA, paramB);
    return target.CanExecute();
}

// this class is made up, but shows the basic concept
public class MyCommand
{
    bool _preConditionA;
    bool _preConditionB;

    public MyCommand(bool preConditionA, bool preConditionB)
    {
            _preConditionA = preConditionA;
            _preConditionB = preConditionB;
    }

    public bool CanExecute()
    {
        if (_preConditionA == false)
            return false;

        if (_preConditionB == false)
            return false;

        return true;
    }
}

或者一些疯狂的[TestCaseSource]。 这两种情况对我个人来说都存在可读性问题。 当参数不仅是布尔值时,这会变得更加复杂。 我检查了[Values][Combinatorical] 属性,但它们并不适合我的情况。

有没有人知道解决这个问题的其他方法?

【问题讨论】:

  • 您能否举一个“适合您的情况”的数据示例,以使这个问题不那么抽象?
  • 为什么Combinatorial 不适用于您的测试?它看起来像是一个完美的用例。
  • @GabrielNegut [Combinatorical] 将测试所有组合,包括我理解正确的例外。问题是我必须编写大量代码来确定当前测试是否正在测试那个特殊的测试用例
  • @rudolf_franek 代码解释了它。我希望所有组合,但 2 个布尔值之一通过测试。我使用测试用例和返回值解决了它
  • @HankTheTank 你能改写一下这个问题吗?说清楚哪一部分是陈述,哪一部分是疑问?

标签: c# unit-testing nunit tdd


【解决方案1】:

有人知道解决这个问题的其他方法吗?

一种可能的解决方案是使用Assumptions 跳过不期望参数产生测试检查的后置条件的组合。

【讨论】:

  • 您将如何使用假设实现示例?
猜你喜欢
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多