Я пытался использовать TDD и получил следующий код:TDD и ресурсы освободив
public class ViewModel extends BaseObservable {
private final Subscription subscription;
public ReleasesViewModel(Observable<List<Data>> model) {
subscription = model.subscribe(this::setData);
}
public void destroy() { //method is not under test
subscription.unsubscribe();
}
public List<Data> getData() {
return data;
}
public void setData(List<Data> data) {
this.data = data;
}
}
и мой тест для:
public class ViewModelTest {
@Test
public void getData() {
BehaviorSubject<List<Data>> observable = BehaviorSubject.create();
ViewModel viewModel = new ViewModel(observable);
List<Data> dataList = Arrays.asList(mock(Data.class), mock(Data.class));
observable.onNext(dataList);
assertTrue(viewModel.getData().equals(dataList));
}
}
Вопрос заключается в следующем:
Я должен убедиться, что subscription.unsubscribe();
будет вызван для освобождения ресурсов, я могу обернуть подписку в некоторой оболочке и добавить зависимость через конструктор, но я чувствую, что могу нарушить инкапсуляцию класса ViewModel
, После многоголоджинга я не нашел никакой подсказки для случая проверки освобождения памяти в практике TDD. Может ли кто-то указать мне на некоторые «лучшие практики» для этого случая.
Почему переход в 'Subscription' в конструкторе нарушает инкапсуляцию - он уже является членом вашего класса ViewModel? Как это вводится в ваш текущий код, если не через конструктор? –
Извините, это была небольшая ошибка в коде. Я получаю «подписку» от «модели», переданной через конструктор. –
Почему «Подписка» должна проходить внутри «ViewModel»? –