Как я могу издеваться над частной переменной в модульных тестах? - PullRequest
0 голосов
/ 01 июня 2018

У меня есть класс, для которого я пишу тест.Заранее я и мой начальник признаем, что это кандидат на рефакторинг, и он был добавлен в отставание.Тем временем мы ищем быстрое решение для продвижения вперед.

Проблема в том, что многочисленные методы в классе используют закрытые переменные.Однако они являются нулевыми, если вы сначала не вызовете один конкретный метод.Да, это не должно быть связано таким образом.Однако сейчас это то, что есть.

Мой класс - это сервис, который выглядит следующим образом:

import { Injectable } from "@angular/core";

@Injectable()
export class SortService {

constructor() { }

// Private Members
private allSort: Output[] = null;
private supportedSort: Output[] = null;
private allSortMap: Map<string, Output> = new Map<string, Output>();

checkSort(): Promise<void>
{ //Populate variables happens here along with other business logic }

//returns the list of all sort output device kinds
getSortOutput(name: string): Output {
    return this.allSortMap.get(name);
   }

}

Теперь, если мы хотим написать тест для getSortOutput, тогда мы должны вызвать checkSort.во-первых, но это очень ограниченный тест, поскольку мы не можем выбросить различные значения allSortMap в getSortOutput для его проверки.

Мы сделали приватный объект общедоступным, а затем мы смогли тщательно его изучить.Так что это работает, но ....

// Private Members
public allSort: Output[] = null;
public supportedSort: Output[] = null;
public allSortMap: Map<string, Output> = new Map<string, Output>();

Суть этого вопроса в том, можем ли мы высмеивать и передавать личные значения.Что-то в этом роде в нашей конфигурации TestBed или аналогично?

providers: [SortService ,
 {provide: Output, name:"allSort", useValue: mockAllSort},
 {provide: Output, name:"supportedSort", useValue: mockSupportedSort},
 {provide: Map<string, Output>, name:"allSortMap", useValue: mockAllSortMap}]

TIA

1 Ответ

0 голосов
/ 25 сентября 2018

Как подтвердил @ R.Richards в своем комментарии рок и трудное место.На данный момент мы сделали значения общедоступными, чтобы мы могли проверить.Это было приемлемо для нас, поскольку оно будет подвергнуто рефакторингу и не подвергнет опасности приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...