Невозможно выполнить угловое модульное тестирование из-за вызова метода, присутствующего внутри конструктора

Размещение new позволяет вам создать объект в уже выделенной памяти.

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

Devex дает хороший пример :

Стандартный C ++ также поддерживает оператор размещения new, который строит объект в предварительно выделенном буфере. Это полезно при создании пула памяти, сборщика мусора или просто в том случае, когда безопасность производительности и исключений является первостепенной (нет опасности сбоя распределения, поскольку память уже выделена, а построение объекта в предварительно выделенном буфере занимает меньше времени) :

blockquote>
char *buf  = new char[sizeof(string)]; // pre-allocated buffer
string *p = new (buf) string("hi");    // placement new
string *q = new string("hi");          // ordinary heap allocation

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

Освобождение места размещения new

Вы не должны освобождать все объекты, которые используют буфер памяти. Вместо этого вы должны удалить [] только исходный буфер. Затем вам придется вручную вызвать деструкторов ваших классов вручную. Для хорошего предложения по этому вопросу см. FAQ по Stroustrup: Есть ли «удаление места размещения» ?

0
задан 1nteger 21 February 2019 в 19:37
поделиться

1 ответ

Поскольку вы создаете новый экземпляр класса, он будет продолжать вызывать testMethod. Вы можете следить за testMethod и callFake вместо вызова метода. Вы также можете использовать beforeAll вместо beforeEach, чтобы компонент создавался только один раз для теста. Таким образом, метод будет вызываться только при создании компонента.

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

0
ответ дан OneLunch Man 21 February 2019 в 19:37
поделиться
Другие вопросы по тегам:

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