Как использовать Ektron API в модульном тестировании C#
Я пытаюсь создать экземпляр API содержимого, как показано ниже
Ektron.Cms.ContentAPI contentApi = new Ektron.Cms.ContentAPI();
Я добавил все необходимые ссылки, но я получаю ошибку ниже.
An exception of type 'Microsoft.Practices.Unity.ResolutionFailedException' occurred in Ektron.Cms.ObjectFactory.dll but was not handled in user code
Additional information: Resolution of the dependency failed, type = "Ektron.Cms.Settings.ISite", name = "(none)".
1 ответ
Существует довольно много конфигурационных файлов, от которых зависит API Ektron. Это конкретное сообщение об ошибке для разрешения ISite
разрешено в ektron.cms.framework.unity.config
,
Использование Ektron API из не-веб-проекта сложно, если не сказать больше. (ссылка: невозможно использовать API Ektron Framework из библиотеки классов)
Возможно, вы путаете юнит-тесты с интеграционными тестами. Вот несколько ресурсов SO:
- В чем разница между юнит-тестами и интеграционными тестами?
- В чем разница между интеграцией и юнит-тестами?
Модульное тестирование кода Ektron является сложным, поскольку общедоступный API не реализует интерфейс. Вы можете написать фасад, который находится поверх Framework API и реализует методы, которые вам нужно вызывать. Что-то вроде этого:
public interface IContentManagerFacade
{
ContentData GetItem(long id, bool returnMetadata);
}
public class ContentManagerFacade : IContentManagerFacade
{
public ContentData GetItem(long id, bool returnMetadata)
{
var cm = new ContentManager();
return cm.GetItem(id, returnMetadata);
}
}
Таким образом, вы можете создать фиктивную реализацию IContentManagerFacade
использовать в ваших юнит-тестах. Ваш фасад (ы) может стать настолько сложным, насколько им нужно. Если это единственный метод API, который вы используете, то все готово. Если вы используете больше API, ваш класс также будет расти. Возможно, вам также понадобится TaxonomyManagerFacade или что-то еще.
Если вы действительно хотите вызвать Ektron API из своего тестового проекта, тогда я желаю вам удачи. Возможно, вы сможете что-то объединить, добавив все файлы конфигурации и, возможно, также ссылаясь на System.Web. В качестве альтернативы вы можете использовать 3-уровневые библиотеки для вызова в Framework API.
Обновить:
Хотя мой ответ здесь использует Framework API в качестве примера, то же самое относится и к построению фасадов вокруг старых устаревших классов API, таких как ContentAPI
учебный класс. Разница лишь в том, что я не верю ContentAPI
доступен как часть 3-уровневого API.