Я предполагаю, что вы используете WPF или Silverlight.Использование шаблона команды, конечно, является правильным способом выполнения команды, инициируемой событием пользовательского интерфейса.Но проблема в том, что в вашем случае эта операция сама по себе что-то делает с пользовательским интерфейсом;и это не ответственность модели представления.
Это может быть решено простым способом, так что модель представления остается тестируемой.Создайте интерфейс IBrowserService с операцией OpenBrowserForOffer.
public void OpenBrowserForOffer(Offer offer, Action<Result> callback)
Создайте одну его реализацию, которая откроет браузер и отобразит выбранное предложение.Создайте другую реализацию, которая является фиктивной реализацией без UI.
Затем из viewmodel вставьте экземпляр IBrowserService и используйте его, чтобы открыть браузер или выполнить фиктивную логику, в зависимости от запуска из реального приложенияtest.
Обратите внимание, что в представлении у вас есть DataContext, чтобы получить модель представления.