Что такое “Тупик”?

На странице es6-features.org/#ClassInheritanceFromExpressions можно написать функцию агрегации, чтобы разрешить множественное наследование:

class Rectangle расширяет агрегацию ( Shape, Colored, ZCoord) {} ​​

blockquote>
var aggregation = (baseClass, ...mixins) => {
    let base = class _Combined extends baseClass {
        constructor (...args) {
            super(...args)
            mixins.forEach((mixin) => {
                mixin.prototype.initializer.call(this)
            })
        }
    }
    let copyProps = (target, source) => {
        Object.getOwnPropertyNames(source)
            .concat(Object.getOwnPropertySymbols(source))
            .forEach((prop) => {
            if (prop.match(/^(?:constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/))
                return
            Object.defineProperty(target, prop, Object.getOwnPropertyDescriptor(source, prop))
        })
    }
    mixins.forEach((mixin) => {
        copyProps(base.prototype, mixin.prototype)
        copyProps(base, mixin)
    })
    return base
}

Но это уже предусмотрено в библиотеках, таких как aggregation .

110
задан Rob Cooper 20 January 2009 в 21:49
поделиться

2 ответа

Martin Fowler записал превосходная статья об этом предмете. От той статьи:

Meszaros использует термин Тест Дважды, поскольку общее обозначение для любого отчасти симулирует объект, используемый вместо реального объекта для тестирования. Название происходит от понятия Трюка Дважды в фильмах. (Одна из его целей состояла в том, чтобы избегать использования любого имени, которое уже широко использовалось.) Meszaros тогда определил четыре конкретных вида дважды:

  • Фиктивные объекты раздаются, но никогда на самом деле используются. Обычно они просто используются для заполнения списков параметров.
  • Поддельные объекты на самом деле имеют рабочие реализации, но обычно берут некоторый ярлык, который делает их не подходящими для производства (в базе данных памяти, хороший пример).
  • Тупики предоставляют консервированные ответы на вызовы, выполненные во время теста, обычно не отвечающего вообще ни на что снаружи, что программируется в для теста. Тупики могут также записать информацию о вызовах, таких как почтовый тупик шлюза, который помнит сообщения, которые она 'отправила', или возможно только, сколько сообщений она 'отправила'.
  • Насмешки - то, о чем мы говорим здесь: объекты, предварительно запрограммированные с ожиданиями, которые формируют спецификацию вызовов, которые они, как ожидают, получат.

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

102
ответ дан Ross 5 November 2019 в 10:06
поделиться

"Тупик" является реализацией интерфейса, который существует для обеспечения data/a какого-то ответа. Например:

  • список DataSet
  • Пользователей
  • Файл

Xml Обычно это было бы обеспечено другим сервисом (быть им веб-сервис, другое приложение, база данных), но для улучшения тестируемость из кода, результаты "фальсифицируются".

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

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

29
ответ дан Rob Cooper 5 November 2019 в 10:06
поделиться
Другие вопросы по тегам:

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