public MainViewModel Build() { ConnectionService = _connectionService ?? Substitute.For <IConnectionService>(); var orderManager = Substitute.For <IOrderManager>(); var orderCalculationService = _orderCalculationService ?? Substitute.For <IOrderCalculationService>(); var marketDataManager = Substitute.For <IMarketDataManager>(); var positionsManager = Substitute.For <IPositionManager>(); var contractManager = Substitute.For <IContractManager>(); var queueProcessor = Substitute.For <IQueueProcessor>(); queueProcessor .When(x => x.Enqueue(Arg.Any <Action>())) .Do(x => x.Arg <Action>().Invoke()); var dispatcherHelper = Substitute.For <IDispatcherHelper>(); dispatcherHelper .When(x => x.InvokeOnUiThread(Arg.Any <Action>())) .Do(x => x.Arg <Action>().Invoke()); var accountManager = _accountManager ?? Substitute.For <IAccountManager>(); var tradeRecordingService = _tradeRecordingService ?? Substitute.For <ITradeRecordingService>(); var positionsViewModel = new PositionsViewModel(dispatcherHelper, marketDataManager, accountManager, positionsManager, contractManager, queueProcessor, tradeRecordingService); SettingsRepository = _settingsRepository; if (SettingsRepository == null) { SettingsRepository = Substitute.For <ISettingsRepository>(); SettingsRepository.GetAllAsync().Returns(new List <Setting> { new Setting { Key = SettingsViewModel.SettingsKeys.RiskPercentOfAccountSize, Value = "1" }, new Setting { Key = SettingsViewModel.SettingsKeys.RiskMultiplier, Value = "1" } }); } SettingsViewModel = new SettingsViewModel(SettingsRepository); var findSymbolService = Substitute.For <IFindSymbolService>(); var factory = new NewOrderViewModelFactory(dispatcherHelper, queueProcessor, findSymbolService, orderCalculationService, orderManager); var tradeRepository = Substitute.For <ITradeRepository>(); var riskCalculationService = _riskCalculationService ?? Substitute.For <IRiskCalculationService>(); MainViewModel.IsUnitTesting = true; return(new MainViewModel( dispatcherHelper, ConnectionService, orderCalculationService, positionsViewModel, SettingsViewModel, new OrdersListViewModel(dispatcherHelper, queueProcessor, factory, tradeRepository, marketDataManager), riskCalculationService, tradeRecordingService)); }