У меня есть класс, для которого я пишу тест.Заранее я и мой начальник признаем, что это кандидат на рефакторинг, и он был добавлен в отставание.Тем временем мы ищем быстрое решение для продвижения вперед.
Проблема в том, что многочисленные методы в классе используют закрытые переменные.Однако они являются нулевыми, если вы сначала не вызовете один конкретный метод.Да, это не должно быть связано таким образом.Однако сейчас это то, что есть.
Мой класс - это сервис, который выглядит следующим образом:
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