我有一种情况需要对需要对非常大的集合进行预初始化的一些场景进行单元测试,但是预先初始化的数据需要进行硬编码才能使单元测试正常工作。
这种事情有典型的做法吗?或者大多数人只是在每个单元测试中制作一个笨重的变量并使用它?我一直非常好奇其他开发者如何应对这种情况。
答案 0 :(得分:2)
如果这些数据在许多不同的测试中被使用,那么我们使用静态容器来保存数据(假设数据没有改变)。然后,测试可以在需要时引用它。
如果数据特定于灯具,那么它只是固定装置的一部分,以保持范围缩小。
对于其他数据部分,我们可以使用模拟/存根技术来公开测试数据。我们的许多数据来自DAL接口,甚至是静态的东西,因此我们已经通过我们使用的常规接口方法存储了接口的测试实现,该接口提供静态数据。我们的很多测试都建立在使用这个存根的基础上。
我们将它与SpecFlow结合使用。我们可以定义送入DAL存根的Background:
表,然后在我们的测试代码使用DAL接口与数据通信时注入该DAL。对于大量静态数据,我们只需对其进行硬编码或将其代码生成到DAL存根可以根据请求获取它的区域。
当然,这不一定是你应该怎么做的。这就是我看到它处理的方式。
但预先初始化的数据需要对单元测试进行硬编码 工作
在我看来,为了证明输出,需要设置数据的测试没有任何问题。我们混合了真正的单元测试,其中外部事物是分开的,我们只测试一个有问题的方法,但是在SpecFlow中我们有一些“用例”测试,我们在更广泛的范围内测试。但是,这仍然需要定义输入。
要控制的一件重要事情是单元测试应尽可能分开。 Fixtures允许您将范围扩展到一小部分测试,但如果您发现自己有大量可能在多个测试中使用的支持数据 - 您需要退后一步。
我们最近有一个静态的配置操作列表,它不是不可变的。在更改后运行更改受影响的测试。我们发现了这一点并对其进行了纠正,但这并非易事。