【发布时间】: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