定义"最后" - 取消测试后的动作

时间:2017-06-26 08:48:13

标签: c# sql-server database visual-studio unit-testing

如何定义在visual studio中手动停止/取消单元测试执行时将执行的操作?

背景:

我们为我们的解决方案构建了一个c#-backend-library,它在我们的数据库中写入了几个对象(ms-sql-server)。然后我们为这个库写了一些单元测试。我们想测试完整的持久性过程,因此单元测试正在做以下事情:

为测试用例创建一个具有唯一名称的临时测试数据库(例如" projectName_Test_21c7d8d3")。 (因为单元测试显然不能在生产系统数据库中写入数据。)

- 将一些对象添加到数据库中(并更改/删除它们)。

- 删除最后的临时数据库。

这很有效。但是:测试持续了几分钟。每天都会发生开发人员开始测试,并在测试结束前手动取消测试(例如,因为他找到了一个"红色测试用例"并希望修复它而不是看到其他测试的结果) 。因此,临时数据库不会在测试结束时删除,必须手动删除。

这个删除数据库过程如何自动化(或一般改进)?

2 个答案:

答案 0 :(得分:0)

您所描述的(技术上)不是单元测试。单元测试意味着完全在内存中运行,无需访问任何外部资源,如文件系统,数据库等。当然,他们应该跑得快。

如果您真的想沿着这条路走下去,那么您可以做的是在设置过程开始时添加清理代码。类似于(伪代码)的东西:

if temp database already exists:
    delete/cleanup database 
create database
populate database

最好在其他所有内容之前运行清理代码,否则您无法保证它将被执行。如果您尝试将其保留在最后并且VS在运行之前崩溃,或者您只是停止单元测试,那么您的数据库将保持无效状态。

答案 1 :(得分:0)

  1. 创建SQL存储过程以删除唯一名称测试数据库。例如,一个存储过程,它接受数据库名称/模式名​​称并将其从数据库服务器中完全删除。

  2. 估计测试用例完成的时间,例如,如果执行整个测试套件需要20分钟,那么这意味着您必须等待大约30分钟才能开始删除临时测试用例测试数据库/架构。

  3. 当您取消测试过程时,您的测试启动器只需创建一个调用sql server调度程序中存储过程(在.1中)的作业,并要求系统在30分钟后启动它。 / p>