LINUX.ORG.RU

История изменений

Исправление snizovtsev, (текущая версия) :

то вопросы как правильно проверить вызов валидатора остается.

Тебе нужно проверить, что в тесте «валидатор вызвался»? Тогда:
man gmock
man dependency injection

Первое - это чтобы удобно сделать мок, можно и руками. Т.е. тебе нужно сделать «тупую» имплементацию интерфейса Valdate, которая выдаёт заданный в конструкторе ответ и сохраняет в себя историю вызовов. Это автоматизируется через макросы mock framework-а.

Второе - передавать этот класс в конструктор SomeProtocol. Т.е. нужно подрефакторить все классы так, чтобы они сами другие сущности не конструировали, а брали их из параметров конструктора (для удобства можно старое поведение оставить, если в конструктор передали nullptr). А всё конструирование (wiring) проводить в одном централизованном месте, и для тестов оно будет другое. Это называется dependency injection, тут тоже есть фреймворки, но они не так полезны как gmock и можно руками.

Исправление snizovtsev, :

то вопросы как правильно проверить вызов валидатора остается.

Тебе нужно проверить, что в тесте «валидатор вызвался»? Тогда:
man gmock
man dependency injection

Первое - это чтобы удобно сделать мок, можно и руками. Т.е. тебе нужно сделать «тупую» имплементацию интерфейса Valdate, которая выдаёт заданный в конструкторе ответ и сохраняет в себя историю вызовов. Это автоматизируется через макросы mock framework-а.

Второе - передавать этот класс в конструктор SomeProtocol. Т.е. нужно подревакторить все классы так, чтобы они сами другие сущности не конструировали, а брали их из параметров конструктора (для удобства можно старое поведение оставить, если в конструктор передали nullptr). А всё конструирование (wiring) проводить в одном централизованном месте, и для тестов оно будет другое. Это называется dependency injection, тут тоже есть фреймворки, но они не так полезны как gmock и можно руками.

Исходная версия snizovtsev, :

то вопросы как правильно проверить вызов валидатора остается.

Тебе нужно проверить, что в тесте «валидатор вызвался»? Тогда:
man gmock
man dependency injection

Первое - это чтобы удобно сделать мок, можно и руками. Т.е. тебе нужно сделать «тупую» имплементацию интерфейса Valdate, которая выдаёт заданный в конструкторе ответ и сохраняет в себя историю аргументов. Это автоматизируется через макросы mock framework-а.

Второе - передавать этот класс в конструктор SomeProtocol. Т.е. нужно подревакторить все классы так, чтобы они сами другие сущности не конструировали, а брали их из параметров конструктора (для удобства можно старое поведение оставить, если в конструктор передали nullptr). А всё конструирование (wiring) проводить в одном централизованном месте, и для тестов оно будет другое. Это называется dependency injection, тут тоже есть фреймворки, но они не так полезны как gmock и можно руками.