我有一个方法,其中有很多条件:
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));
}
我想对这个函数进行单元测试,但是条件太多了,如果你考虑每一个组合,单元测试的数量就会很疯狂。该返回语句中有 16 个条件,并且由于每个条件都是真/假,即 2^16 种不同的组合,我需要检查。我真的需要在这里创建 2^16 个不同的单元测试来确保每个条件都被利用吗?请注意,这是一个简单的例子。由于法律要求,我的一些功能具有复杂的条件:
return (condition0 && condition1 && (condition2 || condition3)
&& (condition4 || (condition5 && condition6)) ...)
根据我的一些函数的数学计算,条件可以产生的不同组合的数量是数百万!我研究了数据驱动单元测试 (DDUT) 以及参数化单元测试 (PUT),但这只是让单元测试成为“填空”风格。我仍然必须提供所有各种组合和预期的结果!例如:
// Parameterized Unit Test
[TestCase(..., Result = true)] // Combination 0
[TestCase(..., Result = true)] // Combination 1
[TestCase(..., Result = false)] // Combination 2
public bool GivenInput_IsLegalSomething_ReturnsValidResult(...) { }
如果我使用 MSTest 来提取数据源(例如 csv),我仍然会遇到同样的问题。我有太多的组合会产生不同的结果。有没有我不知道的替代方案?