2011-10-28 32 views
1

我有一种情况,我需要单元测试一些需要预先初始化非常大的集合的场景,但预先初始化的数据需要硬编码才能使单元测试正常工作。大型收藏单元测试 - 您如何最好地处理这些情况?

这种事情有没有典型的做法?或者你们大多数人在每个单元测试中做出一个笨重的变量并使用它?我一直很好奇其他开发人员如何处理这种情况..

回答

2

如果这个数据是在很多不同的测试中使用的,那么我们使用一个静态容器来保存数据(假设数据没有更改)。然后测试可以在需要时引用它。

如果数据是特定于夹具的,那么它只是夹具的一部分,以便缩小范围。

对于其他数据部分,我们可以使用模拟/存根技术来公开测试数据。我们的很多数据都是通过我们的DAL接口发布的,甚至是静态的东西,所以我们通过我们使用的普通接口方法为接口提供了静态数据的测试实现。我们的很多测试都是使用这个存根建立的。

我们将此与SpecFlow结合使用。我们可以定义送入DAL存根的Background:表,然后在我们的测试代码使用DAL接口与数据进行通信时注入此DAL。对于大量的静态数据,我们只需对其进行硬编码或将其编码到DAL存根可根据请求获取的区域。

当然,这不一定是你应该怎么做的。这正是我所看到的处理方式。


但前期初始化的数据需要被硬编码为单元测试 工作

在我看来,没有什么不对的,需要一组数据,以测试证明输出。我们混合了真正的单元测试,其中外部事物是分开的,我们只测试一个有问题的方法,但是随后使用SpecFlow,我们有了一些“用例”测试,我们在更广的范围内测试事物。但是,这仍然需要定义的输入。


要保持控制的一件重要事情是单元测试应尽可能分开。 Fixtures允许您将范围扩展到一小部分测试,但是如果您发现自己有大量可能会在多次测试中使用的备份数据 - 您需要退后一步。

我们最近有一个配置操作的静态列表不是不可变的。进行更改后,测试会在更改后运行。我们确定了这一点并加以纠正,但这并非微不足道。