Я искал в Интернете, но я не могу узнать, как тестирование улучшилось с помощью MVVM. Я получаю идею наличия viewModel, который взаимодействует с представлением, но я не знаю, как бы написать хорошие тестовые примеры с MVVM. У меня есть следующее ViewModel в уже Android:Как проверить MVVM с DataBinding на Android
public class ViewModel extends BaseObservable {
private long countDownTime;
private MyCountDownTimer mCountDownTimer;
private final String TAG = getClass().getSimpleName();
@Bindable
public long getCountDownTime() {
return countDownTime;
}
public void setCountDownTime(long countDownTime) {
this.countDownTime = countDownTime;
notifyPropertyChanged((int) BR.countDownTime);
Log.d(TAG,"prime tick:"+countDownTime);
}
public void startCounting(Long milli){
mCountDownTimer.restartTimer(milli);
}
}
, а затем у меня есть представление XML, который использует его. У меня также есть активность, которая фактически связывает xml с этим представлением. Эта деятельность выглядит следующим образом:
public class MainActivity extends FragmentActivity {
CountdownBinder mCountdownBinder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
mCountdownBinder = DataBindingUtil.setContentView(this, R.layout.activity_main);
//Lets reference our textview just for fun
mCountdownBinder.tvGreen.setText("initial text");
ViewModel viewModel = ViewModel.instance();
//now tell databinding about your viewModel below
mCountdownBinder.setViewModel(viewModel);
viewModel.startCounting(200000L);
}
}
Теперь я настолько смущен, что это делает тестирование лучше. Я читал об этом, но мне нужен пример реального мира. Этот код от blog here, если это имеет значение.
По-видимому, я могу легче проверить свои модульные тесты? Будет ли я проверять только viewModel в MVVM? Что нужно тестировать в первую очередь?
Эй, действительно, оцените отзывы. Каким будет ваше тестирование CountDownTimerInterface. Имеет смысл. Но в моем случае, какова была бы модель? – j2emanue
Нет, я не тестирую 'CountDownTimerInterface'. Это насмехается. Я тестирую поведение ViewModel (так как в этом примере нет данных для тестирования). В вашем примере вы используете «MyCountDownTimer», и невозможно проверить ваш «ViewModel» изолированно, потому что всякий раз, когда вы вызываете 'this.mCountDownTimer.something', вы будете тестировать счетчик, а не модель вашего представления. Я удалил эту связь, заменив реализацию конкретного счетчика интерфейсом, и этот интерфейс будет издеваться во время теста (не используя настоящий класс MyCountDownTimer) – Tseng
@ j2emanue: Здесь ссылка на конструкцию, управляемую поведением (BDD) https://en.wikipedia.org/wiki/Behavior-driven_development – Tseng