Смысл MVVM в том, чтобы сделать его таким, чтобы вы могли тестировать как можно большую часть своего приложения, фактически не запуская его.
Используя автоматическое тестирование пользовательского интерфейса, теперь можно проверить, что навигация происходит правильно, если она запускается представлением, но для этого требуется запустить приложение и фактически запустить весь поток управления. Так что, хотя это возможно, это все еще довольно неловко и медленно. Могут быть и другие фреймворки, которые лучше подходят для этого, но я обнаружил, что страницы Xamarin.Forms не совсем хорошо работают с модульным тестированием. Использование навигации на основе представлений в моем опыте означает, что приложение автоматически становится менее тестируемым.
Однако, если вы кодируете навигацию в своих моделях ViewModels, вы можете проверить это, не запуская приложение. Вы создаете экземпляр ViewModel в своем тесте, отправляете имитированный ввод, который должен вызывать навигацию, и наблюдаете, куда он пытается перейти. Это намного проще, чем тестирование навигации на основе View, и это очень быстро.
Большинство приложений MVVM, над которыми я работал (WPF, Xamarin), имели логику навигации в ViewModel, то есть я имею в виду, что интерфейс внедряется для обеспечения запуска навигации.