Как удалить только сгенерированные данные модульного теста?

Я использую этот код для создания данных:

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 ответ

Решение

Единственное, что может автоматически отслеживать то, что вы сделали, и откатывать это назад - это транзакция.

Кроме этого вам нужно следить за этим самостоятельно, или просто не иметь ваших модульных тестов для создания данных. Это не очень хорошая практика, чтобы тестировать определенный код в вашей производственной системе, поэтому поле флага "testData" не очень хорошо, но я думаю, вы могли бы.

Мое личное решение состояло в том, чтобы создать тесты, которые на самом деле не вставляют данные в первую очередь, но для этого потребовалось использование внедрения зависимостей и создание среды для насмешки, чтобы сделать возможным выполнение модульных тестов.

Несколько более простым решением может быть наличие объекта, который отслеживает все ваши изменения данных и откатывает их в конце, но, возможно, простое использование транзакции поможет в этом.

Другие вопросы по тегам