was successfully added to your cart.

Корзина

(tech) Как (юнит) тестить приватные методы класса

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

Так вы (1) сделаете свой основной класс тоньше и ближе к SOLID, (2) не столкнетесь с проблемой тестирования приватных методов.

2. Исходя из первого пункта, можно также заключить, что само по себе “тестирование приватных методов” – нелогичная идея. Они должны быть небольшими и утилитарными, поскольку настоющую ценность для вашего приложения имеют как раз таки публичные методы (другие компоненты приложения могут вызывать только их).

3. Если уж никак не получается / не хочется выделять в отдельный класс, то есть лайфхак: 

В файле теста наследуете тестируемый класс и объявляете у него публичные методы, которые под собой просто вызывают приватные. Пример:

// user.ts
class User {
  private hashPassword(password: string): void {
    ….
  }
}

// user.test.ts
class UserForTest extends User {
  public testHashPassword(password: string): void {
    return this.hashPassword(password)
  }
}

Гораздо больше контента и развлечений в Telegram-канале