Как я могу загрязнять объект свойств. Установки, когда модульный тест находится в другой сборке?
-
19-09-2019 - |
Вопрос
У меня есть объект, ссылки на кучу Properties.Settings.Default...
Значения и мне нужно загрязнять их в модульном тесте для этого объекта.
К сожалению, тип объекта настроек объявляется как internal
И поэтому я не могу получить к нему доступ к модульному тестовому проекту.
Как я могу загрязнять возвратные значения для этих свойств? Я использую издевательства над надписью для насмешек.
Решение
В общем, я бы не стал. Вместо ваших «внутренних» объектов фактически чтение Properties.settings.default, пусть они объявили оформленное свойство (либо во время строительства, либо через свойства), и имеют другой кусок кода заполнить их.
Таким образом, вы можете проверить все, кроме чтения по умолчанию в ваших модульных тестах, и вы становитесь менее связанными с способом чтения значений по умолчанию, облегчая переключение механизма в будущем.
Другие советы
Кроме того, еще один совет, который вы можете найти полезным для решения внутренней проблемы, вы можете выборочно сделать свой внутренний код видимым для ваших модульных тестов. В тестируете код, откройте свой AssemblyInfo.cs и добавьте что -то вроде следующего:
#if UNITTEST
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("YourUnitTestAssembly")]
#endif
Тогда вам просто нужен символ, определяемый в вашей сборке, и ваша тестовая сборка сможет просматривать всех внутренних участников.
Я знаю, что это старый вопрос, но я подумал, что добавлю в свое решение как простое и смогу кому -то помочь.
Созданный класс настроек является частичным классом, мы можем использовать это для создания нашей собственной реализации дефолта.
Создайте новый файл в папке свойств
internal partial class Settings : ISettings
{
private static ISettings _setInstance;
internal static ISettings Get
{
get
{
return _setInstance = _setInstance ?? Default;
}
set { _setInstance = value; }
}
}
Затем, когда мы используем его в другом месте в приложении, мы можем позвонить.
Если ваши тесты найдены в отдельном проекте, вам придется добавить еще один класс, чтобы разоблачить сеттер для общественности. Мы не можем изменить файл настроек на публику, так как это будет просто перезаписано в следующий раз, когда мы изменим или добавим значение.