public void DefaultWeatherViewDataSourceGetWeatherInfoTest() { var providerInfo1 = new Mock <IDataProviderInfo>(); var providerInfo2 = new Mock <IDataProviderInfo>(); var weatherData1 = new Mock <IWeatherData>(); var weatherData2 = new Mock <IWeatherData>(); var provider1 = new Mock <IWeatherDataProvider>(); provider1.SetupGet(t => t.Info).Returns(providerInfo1.Object); provider1.Setup(t => t.GetWeatherData(It.IsAny <IToponymData>())).Returns(weatherData1.Object); var provider2 = new Mock <IWeatherDataProvider>(); provider2.SetupGet(t => t.Info).Returns(providerInfo2.Object); provider2.Setup(t => t.GetWeatherData(It.IsAny <IToponymData>())).Returns(weatherData2.Object); var Toponym = new Mock <IToponymData>(); var geoProvider = new Mock <IToponymDataProvider>(); geoProvider.Setup(t => t.FindByName(It.IsAny <string>())).Returns(Toponym.Object); var providerGetter = new Mock <IProviderGetter>(); providerGetter.Setup(t => t.GetWeatherDataProviders()) .Returns(new[] { provider1.Object, provider2.Object }); providerGetter.Setup(t => t.GetToponymProviders()).Returns(new[] { geoProvider.Object }); var findedName = "testValue"; var dataSource = new DefaultWeatherViewDataSource(providerGetter.Object); var weatherInfo = dataSource.GetWeatherInfo(findedName); providerGetter.Verify(t => t.GetWeatherDataProviders(), Times.Once); providerGetter.Verify(t => t.GetToponymProviders(), Times.Once); geoProvider.Verify(t => t.FindByName(It.Is <string>(s => s == findedName)), Times.Once); provider1.Verify(t => t.GetWeatherData(It.Is <IToponymData>(k => k == Toponym.Object)), Times.Once); provider2.Verify(t => t.GetWeatherData(It.Is <IToponymData>(k => k == Toponym.Object)), Times.Once); Assert.IsNotNull(weatherInfo); Assert.AreEqual(Toponym.Object, weatherInfo.Toponym); Assert.AreEqual(2, weatherInfo.WeatherFromProvider.Length); Assert.AreEqual(weatherData1.Object, weatherInfo.WeatherFromProvider[0].WeatherData); Assert.AreEqual(providerInfo1.Object, weatherInfo.WeatherFromProvider[0].DataProviderInfo); Assert.AreEqual(weatherData2.Object, weatherInfo.WeatherFromProvider[1].WeatherData); Assert.AreEqual(providerInfo2.Object, weatherInfo.WeatherFromProvider[1].DataProviderInfo); }