【发布时间】:2012-07-18 04:18:26
【问题描述】:
我读过在单元测试中生成随机数据通常是一个坏主意(我明白为什么),但是测试随机数据然后从随机测试构造一个固定单元测试用例发现的错误似乎不错。但是我不明白如何很好地组织它。我的问题实际上与特定的编程语言或特定的单元测试框架无关,所以我将使用 python 和一些伪单元测试框架。这是我对它的编码方式:
def random_test_cases():
datasets = [
dataset1,
dataset2,
...
datasetn
]
for dataset in datasets:
assertTrue(...)
assertEquals(...)
assertRaises(...)
# and so on
问题是:当这个测试用例失败时,我无法确定是哪个数据集导致失败。我看到了两种解决方法:
- 为每个数据集创建一个测试用例 — 问题在于测试用例负载和代码重复。
- 通常测试框架允许我们将消息传递给断言函数(在我的示例中,我可以执行类似
assertTrue(..., message = str(dataset))的操作)。问题是我应该将这样的消息传递给每个断言,这看起来也不优雅。
有没有更简单的方法?
【问题讨论】:
-
数据集是静态的还是随机生成的?
-
@zerkms 我稍微澄清了这个问题。首先,我随机生成大数据集,如果发现错误,我会将这样的测试添加到固定的静态数据集中。
-
@karlicoss:您似乎希望使用单元测试框架来做Fuzz testing。这并不奏效,因为模糊测试需要数千台机器以高吞吐量进行数百万次测试。数据不是完全随机的:它是根据被测软件所期望的精细数据结构生成的,以最大限度地提高命中率。这需要一种不同类型的框架,目前还没有流行的框架。 (模糊测试本身就是一个小众领域,没有多少普通程序员会使用。)
标签: unit-testing testing tdd