unit-testing - 如何避免集成测试中的业务逻辑重复

标签 unit-testing testing integration-testing

我有一个返回产品更改历史的网络服务方法,它的签名如下所示:

List<MyProduct> GetProductHistory(int iProductId);

我想为此方法创建一个集成测试。为此,我需要在数据库中创建一些数据。在这里,我可以创建一个函数,在数据库中写入一些“硬编码”记录,以模拟产品更改历史记录。

我还需要测试其他函数 (int GetProductAverageValue(int iProductId)),它应该使用产品历史信息进行一些数据处理。为了测试这个功能,我需要几组记录(几种不同的历史类型)。在这里我几乎没有选择:

  1. 创建几个不同的硬编码数据集(每个测试用例)(那里有很多数据,所以这些集有点吓人);
  2. 在我的集成测试中创建一些功能,这些功能将为产品...创建所需的历史记录

第一个选项非常庞大,第二个 - 导致集成测试层上的业务逻辑重复......

请指教。欢迎任何想法...

最佳答案

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/

相关文章:

java - 尝试模拟 java.lang.System 时出现 MockitoException

复杂数据结构上的python unittest.TestCase.assertEquals()

java - Micronaut 中是否有 DropwizardTestSupport 的等效项?

javascript - 如何在 Jasmine 中编写 FileReader 测试?

c# - NUnit 不遵守属性继承

java - 使用 Android Studio 在 Save 上运行单元测试

iphone - NSError 的单元测试

typescript - Jest模拟类的类实例和类中的函数

java - 如何计算 Spring 测试中 Spring Boot 加载的次数?

testing - 驱动多个相互交互的浏览器