Как я могу загрязнять объект свойств. Установки, когда модульный тест находится в другой сборке?

StackOverflow https://stackoverflow.com/questions/1885644

Вопрос

У меня есть объект, ссылки на кучу 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; }
    }
}

Затем, когда мы используем его в другом месте в приложении, мы можем позвонить.

Если ваши тесты найдены в отдельном проекте, вам придется добавить еще один класс, чтобы разоблачить сеттер для общественности. Мы не можем изменить файл настроек на публику, так как это будет просто перезаписано в следующий раз, когда мы изменим или добавим значение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top