На каком уровне я должен издеваться над зависимостью, когда зависимость сложная?

Теперь у меня есть класс А для тестирования. Когда я тестирую метод (называемый Amethod) A, Amethod вызывает другой метод (называемый Bmethod) класса B. И в этом методе B Bmethod вызывает метод интерфейса C. Ему просто нравится дерево зависимостей:

A->B->C

Я использую gmock для модульного тестирования Amethod класса A. Какой из них я должен издеваться, B или C?


person XHLin    schedule 20.09.2016    source источник
comment
Прочтите о законе Деметры — хорошие методы программирования, такие как LoD, предназначены только для предотвращения подобных случаев — en.wikipedia .org/wiki/Law_of_Demeter   -  person PiotrNycz    schedule 21.09.2016


Ответы (1)


Вы должны имитировать только зависимости SUT (тестируемая система - A в вашем случае) (B в вашем случае), как, например, при настройке Bmethod для возврата заданного значения. Вы бы беспокоились только о том, чтобы издеваться над C при тестировании B и так далее.

person Alexandru Marculescu    schedule 20.09.2016
comment
Я знаю, что вы имеете в виду. Но имитировать C гораздо проще, чем B, используя gmock. Потому что класс B — это конкретный класс, а метод B — не виртуальный метод. C — это интерфейс с виртуальным методом. - person XHLin; 20.09.2016
comment
Вы думали о том, чтобы абстрагироваться от контракта B в интерфейсе ради тестируемости? - person Alexandru Marculescu; 21.09.2016