Chrome не поддерживает cookie для локальных файлов (или, как Peter Lyons упомянул, localhost*), если Вы не запускаете его с - enable-file-cookies флаг. Можно считать дискуссию об этом в http://code.google.com/p/chromium/issues/detail?id=535 .
*Chrome делает cookie поддержки при использовании локального IP-адреса (127.0.0.1) непосредственно. таким образом в localhost случае, который мог быть более легким обходным решением.
Вот несколько ситуаций, в которых насмешка необходима e:
Чтобы использовать несколько иной подход (я думаю, что mocks хорошо освещены выше):
«Возьмите базу данных - если вы пишете тестовый код, возможно, вам это не понадобится. test подключен в реальном времени к производственной базе данных, где будут выполняться фактические операции ».
IMO - плохой способ указать пример использования. Вы бы никогда не «подключили его к базе данных prod» во время тестирования с использованием моков или без них. Каждый разработчик должен иметь локальную базу данных для тестирования. Затем вы перейдете к базе данных тестовых сред, затем, возможно, к UAT и, наконец, к продукту. Вы не насмехаетесь, чтобы избежать использования живой базы данных, вы насмехаетесь над тем, чтобы классы, не зависящие напрямую от базы данных, не требовали, чтобы вы настраивали базу данных.
Наконец (и я согласен, что могу получить некоторые комментарии по этому поводу) IMO, локальная база данных разработчика - допустимая вещь, которую можно использовать во время модульных тестов. Вы должны нажимать его только при тестировании кода, который напрямую взаимодействует с базой данных, и использовать имитацию, когда вы тестируете код, который косвенно обращается к базе данных.
Чтобы добавить к этим точным ответам, макеты объектов используются в структурном программировании сверху вниз или снизу вверх (в том числе ООП). Они предназначены для предоставления данных модулям верхнего уровня (графический интерфейс, логическая обработка) или для работы в качестве фиктивного вывода.
Рассмотрите подход сверху вниз: вы сначала разрабатываете графический интерфейс, но графический интерфейс должен содержать данные. Таким образом, вы создаете фиктивную базу данных, которая просто возвращает std :: vector <> данных. Вы определили «контракт» отношений. Кого волнует, что происходит внутри объекта базы данных - пока мой список GUI получает std :: vector <> Я счастлив. Это может быть ложная информация для входа в систему, все, что вам нужно для работы GUI.
Рассмотрите восходящий подход. Вы написали парсер, который читает текстовые файлы с разделителями. Как узнать, работает ли он? Вы пишете фиктивный «приемник данных» для этого объекта и маршрутизируете туда данные, чтобы проверить (хотя обычно), что данные читаются правильно. Для модуля на следующем уровне может потребоваться 2 источника данных, но вы написали только один.
И при определении фиктивных объектов вы также определили договор о том, как отношения. Это часто используется в тестовом программировании. Вы пишете тестовые примеры, используете фиктивные объекты, чтобы заставить его работать, и часто интерфейс фиктивного объекта становится окончательным интерфейсом (поэтому в какой-то момент вы можете захотеть выделить интерфейс фиктивного объекта в чистый абстрактный класс) .
Надеюсь, это поможет
Рассмотрим восходящий подход. Вы написали парсер, который читает текстовые файлы с разделителями. Как узнать, работает ли он? Вы пишете фиктивный «приемник данных» для этого объекта и маршрутизируете туда данные, чтобы проверить (хотя обычно), что данные читаются правильно. Для модуля на следующем уровне может потребоваться 2 источника данных, но вы написали только один.
И при определении фиктивных объектов вы также определили договор о том, как отношения. Это часто используется в тестовом программировании. Вы пишете тестовые примеры, используете фиктивные объекты, чтобы заставить его работать, и часто интерфейс фиктивного объекта становится окончательным интерфейсом (поэтому в какой-то момент вы можете захотеть выделить интерфейс фиктивного объекта в чистый абстрактный класс) .
Надеюсь, это поможет
Рассмотрим подход снизу вверх. Вы написали парсер, который читает текстовые файлы с разделителями. Как узнать, работает ли он? Вы пишете фиктивный «приемник данных» для этого объекта и маршрутизируете туда данные, чтобы проверить (хотя обычно), что данные читаются правильно. Для модуля на следующем уровне может потребоваться 2 источника данных, но вы написали только один.
И при определении фиктивных объектов вы также определили договор о том, как отношения. Это часто используется в тестовом программировании. Вы пишете тестовые примеры, используете фиктивные объекты, чтобы заставить его работать, и часто интерфейс фиктивного объекта становится окончательным интерфейсом (вот почему в какой-то момент вы можете захотеть разделить интерфейс фиктивного объекта на чистый абстрактный класс) .
Надеюсь, это поможет
Вы написали парсер, который читает текстовые файлы с разделителями. Как узнать, работает ли он? Вы пишете фиктивный «приемник данных» для этого объекта и маршрутизируете туда данные, чтобы проверить (хотя обычно), что данные читаются правильно. Для модуля на следующем уровне может потребоваться 2 источника данных, но вы написали только один.И при определении фиктивных объектов вы также определили договор о том, как отношения. Это часто используется в тестовом программировании. Вы пишете тестовые примеры, используете фиктивные объекты, чтобы заставить его работать, и часто интерфейс фиктивного объекта становится окончательным интерфейсом (вот почему в какой-то момент вы можете захотеть разделить интерфейс фиктивного объекта на чистый абстрактный класс) .
Надеюсь, это поможет
Вы написали парсер, который читает текстовые файлы с разделителями. Как узнать, работает ли он? Вы пишете фиктивный «приемник данных» для этого объекта и маршрутизируете туда данные, чтобы проверить (хотя обычно), что данные читаются правильно. Для модуля на следующем уровне может потребоваться 2 источника данных, но вы написали только один.И при определении фиктивных объектов вы также определили договор о том, как отношения. Это часто используется в тестовом программировании. Вы пишете тестовые примеры, используете фиктивные объекты, чтобы заставить его работать, и часто интерфейс фиктивного объекта становится окончательным интерфейсом (вот почему в какой-то момент вы можете захотеть разделить интерфейс фиктивного объекта на чистый абстрактный класс) .
Надеюсь, это поможет
для этого объекта и направить туда данные, чтобы проверить (хотя обычно), что данные читаются правильно. Для модуля на следующем уровне может потребоваться 2 источника данных, но вы написали только один.И при определении фиктивных объектов вы также определили договор о том, как отношения. Это часто используется в тестовом программировании. Вы пишете тестовые примеры, используете фиктивные объекты, чтобы заставить его работать, и часто интерфейс фиктивного объекта становится окончательным интерфейсом (поэтому в какой-то момент вы можете захотеть выделить интерфейс фиктивного объекта в чистый абстрактный класс) .
Надеюсь, это поможет
для этого объекта и направить туда данные, чтобы проверить (хотя обычно), что данные читаются правильно. Для модуля на следующем уровне может потребоваться 2 источника данных, но вы написали только один.И при определении фиктивных объектов вы также определили договор о том, как отношения. Это часто используется в тестовом программировании. Вы пишете тестовые примеры, используете фиктивные объекты, чтобы заставить его работать, и часто интерфейс фиктивного объекта становится окончательным интерфейсом (поэтому в какой-то момент вы можете захотеть выделить интерфейс фиктивного объекта в чистый абстрактный класс) .
Надеюсь, это поможет
вы также определили договор, как отношения. Это часто используется в тестовом программировании. Вы пишете тестовые примеры, используете фиктивные объекты, чтобы заставить его работать, и часто интерфейс фиктивного объекта становится окончательным интерфейсом (поэтому в какой-то момент вы можете захотеть выделить интерфейс фиктивного объекта в чистый абстрактный класс) .Надеюсь, это поможет
вы также определили договор, как отношения. Это часто используется в тестовом программировании. Вы пишете тестовые примеры, используете фиктивные объекты, чтобы заставить его работать, и часто интерфейс фиктивного объекта становится окончательным интерфейсом (поэтому в какой-то момент вы можете захотеть выделить интерфейс фиктивного объекта в чистый абстрактный класс) .Надеюсь, это поможет
Я бы резюмировал так:
В интервью я '
При модульном тестировании каждый тест предназначен для тестирования одного объекта. Однако у большинства объектов в системе есть другие объекты, с которыми они взаимодействуют. Мок-объекты - это фиктивные реализации этих других объектов, используемые для изоляции тестируемого объекта.
Преимущество этого заключается в том, что любые модульные тесты, которые терпят неудачу, обычно изолируют проблему на тестируемый объект. В некоторых случаях проблема будет с фиктивным объектом, но эти проблемы должно быть проще выявить и исправить.
Возможно, стоит написать несколько простых модульных тестов и для фиктивных объектов.
Обычно они встречаются. используется для создания фиктивного уровня доступа к данным, чтобы модульные тесты можно было запускать изолированно от хранилища данных.
Другие варианты использования могут заключаться в имитации пользовательского интерфейса при тестировании объекта контроллера в шаблоне MVC. Это позволяет лучше автоматизировать тестирование компонентов пользовательского интерфейса, которые могут несколько имитировать взаимодействие с пользователем.
Пример:
public interface IPersonDAO
{
Person FindById(int id);
int Count();
}
public class MockPersonDAO : IPersonDAO
{
// public so the set of people can be loaded by the unit test
public Dictionary<int, Person> _DataStore;
public MockPersonDAO()
{
_DataStore = new Dictionary<int, Person>();
}
public Person FindById(int id)
{
return _DataStore[id];
}
public int Count()
{
return _DataStore.Count;
}
}
Мок-объекты / функции также могут быть полезны при работе в команде. Если вы работаете над частью базы кода, которая зависит от другой части базы кода, за которую отвечает кто-то еще - которая все еще пишется или еще не написана - фиктивный объект / функция полезен в дает вам ожидаемый результат, чтобы вы могли продолжить свою работу, не задерживаясь в ожидании, пока другой человек закончит свою часть.
Здесь я пойду в другом направлении. Stubbing / Faking делает все, что упомянуто выше, но, возможно, интервьюеры думали о mocks как о фальшивом объекте, который заставляет тест пройти или не пройти. Я основываюсь на терминологии xUnit . Это могло привести к некоторой дискуссии о тестировании состояния и тестировании поведения / взаимодействия .
Возможно, они искали ответ: фиктивный объект отличается от заглушки. Заглушка имитирует зависимость для тестируемого метода. Заглушка не должна приводить к сбою теста. Это делает макет , а также проверяет, как и когда он вызывается. Моки приводят к тому, что тест проходит или не проходит в зависимости от основного поведения. Это имеет то преимущество, что меньше зависит от данных во время теста, но более тесно связано с реализацией метода.
Конечно, это предположение, более вероятно, что они просто хотели, чтобы вы описали преимущества заглушки и DI.
Это делает макет , а также проверяет, как и когда он вызывается. Моки приводят к тому, что тест проходит или не проходит в зависимости от основного поведения. Это имеет то преимущество, что меньше зависит от данных во время теста, но более тесно связано с реализацией метода.Конечно, это предположение, более вероятно, что они просто хотели, чтобы вы описали преимущества заглушки и DI.
Это делает макет , а также проверяет, как и когда он вызывается. Моки приводят к тому, что тест проходит или не проходит в зависимости от основного поведения. Это имеет то преимущество, что меньше зависит от данных во время теста, но более тесно связано с реализацией метода.Конечно, это предположение, более вероятно, что они просто хотели, чтобы вы описали преимущества заглушки и DI.