我正在为“ MySQL Requests Manager”编写测试,问题是某些测试取决于数据库中包含的数据。因此,如果有任何其他测试将删除所需的记录,或者其他人将其删除,则意味着该测试即使正确也将失败。
我在这里考虑两种方法: 1.在测试本身中,请先备份所有需要的数据,然后再运行测试并从备份中还原数据。但是,以我的拙见,这更容易出错且“较重”。 2.在运行其中一项测试甚至所有测试之前,首先要创建一个具有结构和所需数据(我认为是从先前进行的转储)的全新数据库。这仅涉及两个“全局”操作:创建数据库并删除它。当然,我需要为此完全隔离MySQL用户和数据库。
您的想法以及您可以推荐什么?另一个程序员如何处理此类问题?
答案 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
}
这意味着数据库是独立于系统的,并且每个测试运行都是隔离的,而不必担心丢失数据或测试之间的干扰。