数据相关测试

时间:2019-04-19 20:06:48

标签: java mysql testing vert.x

我正在为“ MySQL Requests Manager”编写测试,问题是某些测试取决于数据库中包含的数据。因此,如果有任何其他测试将删除所需的记录,或者其他人将其删除,则意味着该测试即使正确也将失败。

我在这里考虑两种方法: 1.在测试本身中,请先备份所有需要的数据,然后再运行测试并从备份中还原数据。但是,以我的拙见,这更容易出错且“较重”。 2.在运行其中一项测试甚至所有测试之前,首先要创建一个具有结构和所需数据(我认为是从先前进行的转储)的全新数据库。这仅涉及两个“全局”操作:创建数据库并删除它。当然,我需要为此完全隔离MySQL用户和数据库。

您的想法以及您可以推荐什么?另一个程序员如何处理此类问题?

2 个答案:

答案 0 :(得分:0)

如果您想检查一下,这里有一个不同的想法:有一个Java框架Mockito在这种情况下非常有用。使用它,您可以创建某些对象/服务的“模拟”实例化,从而避免实际实例化它们。使用模拟,您可以返回自定义/硬编码结果,并测试您的服务是否正确处理了该响应。例如,假设您有一个类“ SQLTestService”,其类具有一个名为“ getData()”的方法。您可以实例化“ SQLTestService”的模拟,并在调用“ getData()”时使其返回特定值。这样,您的测试实际上就不会依赖于数据库中的数据,并且可以测试您知道服务应该能够处理的特定结果。

答案 1 :(得分:0)

编写单元测试时,应该:

  • 使用测试数据库
  • 在每次测试之前加载数据(或在所有测试之前加载数据)
@Before 
public void setUp() {
  //insert your test data here
}     
  • 每次测试后删除数据(或在所有测试后删除数据)
@After
public void tearDown() {
 // drop your test data here
}

这意味着数据库是独立于系统的,并且每个测试运行都是隔离的,而不必担心丢失数据或测试之间的干扰。