如何仅删除生成的单元测试数据?

时间:2012-10-29 15:31:16

标签: unit-testing intersystems-cache objectscript

我使用此代码创建数据:

Method OnBeforeAllTests() As %Status
{
    // Create one MyClass row   
    Do ##class(MyClass).Populate(1)
    Quit $$$OK
}

这将删除数据:

Method OnAfterAllTests() As %Status
{
    Do ##class(MyClass).%KillExtent()
    Quit $$$OK
}

如何更改OnAfterAllTests仅删除使用OnBeforeAllTests填充的数据而不删除任何其他数据?

1 个答案:

答案 0 :(得分:2)

唯一可以自动神奇地跟踪你所做的事情并将其回滚的事情就是交易。

除此之外,您需要自己跟踪它,或者只是没有让您的单元测试实际创建数据。在生产系统中使用测试特定代码并不是一个很好的做法,所以标记字段“testData”不是很好,但我想你可以。

我个人的解决方案是创建实际上并不首先插入数据的测试,但这需要使用依赖注入并创建一个模拟框架来使单元测试编写成为可能。

一个稍微容易一点的解决方案可能是让一个对象跟踪所有数据更改并在最后回滚,但可能只是使用事务会更好地完成此任务。