Как я переименовываю функцию удара?

Самый легкий путь к модульному тесту объект с доступом к базе данных использует области транзакций.

, Например:

    [Test]
    [ExpectedException(typeof(NotFoundException))]
    public void DeleteAttendee() {

        using(TransactionScope scope = new TransactionScope()) {
            Attendee anAttendee = Attendee.Get(3);
            anAttendee.Delete();
            anAttendee.Save();

            //Try reloading. Instance should have been deleted.
            Attendee deletedAttendee = Attendee.Get(3);
        }
    }

Это вернется назад состояние базы данных, в основном как откат транзакции, таким образом, можно будет запускать тест так много раз, как Вы хотите без любого sideeffects. Мы использовали этот подход успешно в крупных проектах. Наша сборка действительно занимает много времени немного для выполнения (15 минут), но это не ужасно для того, чтобы иметь 1 800 модульных тестов. Кроме того, если время изготовления является беспокойством, можно изменить процесс сборки для имения нескольких сборок, один для создания src, другой, который разжигает впоследствии, который обрабатывает модульные тесты, анализ кода, упаковку, и т.д.

30
задан Carl Meyer 29 July 2009 в 23:07
поделиться

2 ответа

Вот способ удалить временный файл:

$ theirfunc() { echo "do their thing"; }
$ eval "$(echo "orig_theirfunc()"; declare -f theirfunc | tail -n +2)"
$ theirfunc() { echo "do my thing"; orig_theirfunc; }
$ theirfunc
do my thing
do their thing
39
ответ дан 27 November 2019 в 23:15
поделиться

Ага. Нашел решение, хотя оно не совсем красивое:

$ theirfunc() { echo "do their thing"; }
$ echo "orig_theirfunc()" > tmpfile
$ declare -f theirfunc | tail -n +2 >> tmpfile
$ source tmpfile
$ theirfunc() { echo "do my thing"; orig_theirfunc; }
$ theirfunc
do my thing
do their thing

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

Обновление : мастер bash Эван Бродер принял вызов (см. Принятый ответ выше). Я переформулировал его ответ в обобщенную функцию copy_function:

# copies function named $1 to name $2
copy_function() {
    declare -F $1 > /dev/null || return 1
    eval "$(echo "${2}()"; declare -f ${1} | tail -n +2)"
}

Можно использовать так:

$ theirfunc() { echo "do their thing"; }
$ copy_function theirfunc orig_theirfunc
$ theirfunc() { echo "do my thing"; orig_theirfunc; }
$ theirfunc
do my thing
do their thing

Очень хорошо!

13
ответ дан 27 November 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: