我有一个返回产品更改历史的网络服务方法,它的签名如下所示:
List<MyProduct> GetProductHistory(int iProductId);
我想为此方法创建一个集成测试。为此,我需要在数据库中创建一些数据。在这里,我可以创建一个函数,在数据库中写入一些“硬编码”记录,以模拟产品更改历史记录。
我还需要测试其他函数 (int GetProductAverageValue(int iProductId)),它应该使用产品历史信息进行一些数据处理。为了测试这个功能,我需要几组记录(几种不同的历史类型)。在这里我几乎没有选择:
- 创建几个不同的硬编码数据集(每个测试用例)(那里有很多数据,所以这些集有点吓人);
- 在我的集成测试中创建一些功能,这些功能将为产品...创建所需的历史记录
第一个选项非常庞大,第二个 - 导致集成测试层上的业务逻辑重复......
请指教。欢迎任何想法...
最佳答案
there are a lot of data there, so these sets are a little bit scary
我不太明白这里有什么难点。也许您可以澄清为什么这很可怕?
当完全测试某些代码所需的测试用例数量过多时(实际程序总是这种情况),使用equivalence partitioning选择较少数量的测试用例来彻底测试代码。
您明确表示这是为了集成测试。您是否已经进行了全面的单元测试?如果没有,请先创建它们。然后集成测试不再需要测试业务逻辑;他们只需要测试组件是否已正确粘合在一起。那不应该需要大量的测试用例。如果是,请考虑重新设计您的代码以引入一个中间级别的程序集(facade),您可以在没有数据库的情况下进行测试。
关于unit-testing - 如何避免集成测试中的业务逻辑重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788575/