Модульное тестирование в MS Access - PullRequest
14 голосов
/ 25 августа 2010

У меня есть проект базы данных Access, который становится слишком большим, чтобы попытаться отследить его в моей голове.Я знаю, что в игре немного поздно, но лучше поздно, чем никогда?Есть ли такая вещь, как инфраструктура модульного тестирования для MS VBA?

Ответы [ 4 ]

9 голосов
/ 27 октября 2014

Я занимаюсь довольно обширной разработкой в ​​Microsoft Access и обнаружил, что AccUnit вполне удовлетворит мои потребности.Сайт автора на немецком языке (но включает в себя некоторый английский перевод), но как только вы получите базовые концепции, это делает модульное тестирование очень простым для реализации.3.0 на серверной части для запуска модульного тестирования, но я считаю, что подход к надстройке AccUnit VBA проще реализовать в моих проектах.

Установка

Процесс установки описан всайт автора , но по существу включает в себя следующие два элемента:

  • Установка SimplyVBUnit 3.0 (обратите внимание, что это больше не доступно на SourceForge, но копия доступна нана сайте AccUnit.)
  • Установите надстройку AccUnit , загруженную по ссылке выше.

Основное использование

После установки вынайдет новое подменю в меню Tools.Нажмите AccUnit -> New Test -> Test Class with AccUnit-Features, чтобы добавить новый модуль класса тестирования в свой проект.

Add new unit test

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

Unit test class

Пример кодаЭто немного загадочно, но основная концепция заключается в том, что когда вы запускаете тесты, он собирается последовательно запускать все подпрограммы в классе и отображать результаты тестов.Давайте сделаем пару примеров тестов.

Простой пример

Допустим, у нас есть функция (в стандартном модуле), которая выглядит следующим образом:

Public Function GetLowestNumber(FirstNum As Double, SecondNum As Double) As Double
If FirstNum < SecondNum Then
    GetLowestNumber = FirstNum
Else
    GetLowestNumber = SecondNum
End If
End Function

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

Public Sub basUtility_GetLowestNumber_Test1()
    Assert.That GetLowestNumber(3, 4), Iz.EqualTo(3)
End Sub

Теперь на панели инструментов AccUnit нажмите кнопку Run all tests.Появится окно теста, в котором будут показаны результаты теста.(Это должно пройти, если вы скопировали в приведенном выше коде.): -)

enter image description here

Разработка теста строки

Но что делает этот инструмент очень мощным, так этовозможность запуска теста с использованием различных комбинаций критериев.В AccUnit они называют это Row Test .Чтобы использовать его, просто настройте функцию так, чтобы она принимала параметры, и перечислите свои тестовые случаи в строках комментариев над функцией.

' AccUnit:Row(3,4,3).Name = "Smaller first"
' AccUnit:Row(4,3,3).Name = "Larger first"
' AccUnit:Row(3,3,3).Name = "Equal"
' AccUnit:Row(3.002,3.6,3.003).Name = "Decimals"
' AccUnit:Row(-3,3,-3).Name = "Mixed sign"
' AccUnit:Row(-7,-3,-7).Name = "Negative"
Public Sub basUtility_GetLowestNumber_RowTest(Num1 As Double, Num2 As Double, Expected As Double)
    Assert.That GetLowestNumber(Num1, Num2), Iz.EqualTo(Expected)
End Sub

Теперь снова нажмите Run all tests, и вы увидите список результатов.

Row test example

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

Также обратите внимание, чтоодин из этих тестов не удался.(В данном случае это была преднамеренная ошибка в ожидаемом результате теста строки, просто чтобы продемонстрировать, как выглядит неудачный тест.) Двойной щелчок неудачного теста приводит к переходу к коду, где я могу отлаживать вещи дальше.

Резюме

Я только что поделился здесь несколькими краткими примерами, но в AccUnit есть ряд дополнительных инструментов и возможностей, которые нужно изучить.(Тестовые теги, флаг игнорирования, шаблоны кода и т. Д ...)

Надеемся, что это даст вам представление об этой опции модульного тестирования для Microsoft Access (или других продуктов VBA).Есть и другие хорошие варианты, но для меня это обеспечило гибкость и простоту, которую я искал.

4 голосов
/ 25 августа 2010

Существует VBAUnit бесплатно на SourceForge. Кроме того, коммерческий vbUnit 3 может поддерживать VBA, а также обычный VB ... Хотя я не уверен.

1 голос
/ 26 августа 2010

Лично я думаю, что благодаря сочетанию превосходного автообновления FE доступа

http://autofeupdater.com/

и среды UAT, которая либо связана с оперативными данными, либо с данными тестирования, которые должны улавливать большинствоиз проблем.Я также являюсь единственным разработчиком доступа, и моя модель состоит из

  • dev, где я делаю изменения

  • UAT, где избрано несколько пользователейпротестируйте изменения и утвердите

  • Живую землю, где живут все остальные

Ключевое различие, которое я вижу между проектами, заключается в способности людей, выполняющихUAT.У меня был один основной выпуск, который был перенесен с бэкэнда доступа на SQL-сервер, я отправил электронное письмо, в котором говорилось, что версия была в UAT, готова к тестированию, и получил его 30 минут спустя, сообщив, что все было протестировано (невозможно) на низком уровне.произошла ошибка в очень общей области.

Итак, в заключение, настройте вашу промежуточную среду и хорошо выберите своих тестеров!

0 голосов
/ 25 августа 2010

Не то, чтобы я знал, но вы могли бы вместо этого использовать обзор кода.

...