Я не уверен, что это возможно через Moq, я использую Rhino Mocks. В этой ситуации я обычно использую Spring.NET и предоставляю альтернативный макет, который я вызываю в тестах, а не в производственном. Это очень хорошо работает для меня, особенно в тех областях, где используются внешние веб-сервисы, источники данных или ситуация, которую вы подняли.
Затем вы выполните модульное тестирование ImageRetrievalConfiguration по отдельности и убедитесь, что он работает как положено. MockImageRetrievalConfiguration может возвращать результаты в зависимости от того, как вы хотите, чтобы они реагировали в вашей тестовой среде. Это максимизирует ваш тестовый набор с гибкостью насмешек.
internal static class SpringApplicationContext
{
private static IApplicationContext applicationContext = null;
static SpringApplicationContext()
{
applicationContext = ContextRegistry.GetContext();
}
public static IApplicationContext ApplicationContext
{
get { return applicationContext; }
}
}
public interface IImageRetrievalData
{
string ImageRepositoryName{get;set;}
}
public interface IImageRetrievalConfiguration
{
IImageRetrievalData GetConfig();
}
public class MockImageRetrievalConfiguration : IImageRetrievalConfiguration
{
public IImageRetrievalData GetConfig()
{
//mock implementation
}
}
public class ImageRetrievalConfiguration : IImageRetrievalConfiguration
{
public IImageRetrievalData GetConfig()
{
//Concrete implementation
}
}
//your code
internal static class ThumbnailPresentationLogic
{
public static string GetThumbnailUrl(List<Image> images)
{
if (images == null || images.FirstOrDefault() == null)
{
return ImageRetrievalConfiguration.MiniDefaultImageFullUrl;
}
Image latestImage = (from image in images orderby image.CreatedDate descending select image).First();
Uri fullUrl;
//Spring
IImageRetrievalConfiguration imageRetrievalConfig = (IImageRetrievalConfiguration) SpringApplicationContext.ApplicationContext["ImageRetrievalConfiguration"];
return Uri.TryCreate(new Uri(imageRetrievalConfig.GetConfig().ImageRepositoryName), latestImage.FileName, out fullUrl) ? fullUrl.AbsoluteUri : ImageRetrievalConfiguration.MiniDefaultImageFullUrl;
}
}
// Это будет ваша тестовая конфигурация
<spring>
<context>
<resource uri="config://spring/objects" />
</context>
<objects xmlns="http://www.springframework.net">
<object name="ImageRetrievalConfiguration" type="Tests.MockImageRetrievalConfiguration, Tests" singleton="false" />
</objects>
</spring>
// Это будет ваша производственная конфигурация
<spring>
<context>
<resource uri="config://spring/objects" />
</context>
<objects xmlns="http://www.springframework.net">
<object name="ImageRetrievalConfiguration" type="Web.ImageRetrievalConfiguration , Web" singleton="false" />
</objects>
</spring>
Вы можете загрузить среду Spring.NET с http://www.springframework.net/