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