#c_sharp #юнит_тесты
Cтруктура моего проекта(solution) следующая: project Core type "Library" - библиотека где я реализовываю базовый функционал: например здесь у меня реализована работа с бд; project GUI type "WPF Application" - пользовательская часть, где я планирую использовать public методы и функции; project Test type "Unit test project" - здесь я занимаюсь тестированием методов и функций из "Core"; class Default { int counter = 0; int groupId { get { if (!(counter < 256)) { counter = 0; } counter = counter + 1; return counter; } } public void SomeMethod() { } } Подскажите возможно ли тестировать методы/функции/свойства которые должны быть видны только внутри "Core" (в приведенном примере это свойство groupId )если да то какой уровень доступа должен быть у такого метода/функции/свойства и какой уровень доступа должен быть у класса что бы он был доступен как в "GUI" так и для тестирования. P.S.это читал, до конца не осознал, до сих пор использовал только public/private модификаторы Upd.: Теперь я кажется понял как мне необходимо было сформулировать свой вопрос: Мне непонятно какие уровни доступа необходимо ставить для приложений построенных описанным мной образом, т.е. есть библиотека(отдельный проект) в ней есть методы которые должны быть доступны из GUI(модификатор public), тестировать их не проблема, внутри библиотеки есть методы которые которые должны быть доступны только внутри неё, в данном случае groupId: данное свойство возвращает идентификатор для группы. я написал код, но я же должен его каким то образом протестировать, да я проверил его сделав сначала публичным написал тест посмотрел результат, изменил идентификатор удалил тест, но я подумал что это не правильно, и должен быть способ сделать это иначе (спасибо @andreycha за ответ). Так же я понял какой модификатор должен быть у Default(public спасибо @PashaPash). А причина этого вопроса была в непонимании мной понятия "сборка". P.S.S.: спасибо всем за приведенные ссылки. Для себя решил что внутренние методы будут иметь идентификатор internal что бы была возможность их тестировать
Ответы
Ответ 1
Да, возможно. internal-типы доступны внутри сборки, в которой они объявлены, а также в других сборках, которые указываются в файле AssemblyInfo.cs текущего проекта c помощью атрибута InternalsVisibleTo: [assembly: InternalsVisibleTo("Test")]Ответ 2
У не-вложенных классов (типов) есть всего два уровня доступности internal - класс виден только внутри сборки public - класс виден откуда угодно По умолчанию уровень доступа у класса - internal. Он видим только другим классам в той же сборке. Соответственно, из GUI вы не сможете получить доступ к Default, пока не поставите на него модификатор public. Если класс не должен быть виден в GUI (например, это какой-то служебный класс сборки), но вы хотите протестировать его отдельно, то можно использовать аттрибут InternalsVisibleTo, который позволит видеть internal вещи еще из из какой-то конкретной сторонней сборки (Test), но оставит их невидимыми для GUI. С видимостью методов - то же самое, но есть нюанс с самой необходимостью тестировать приватные методы. Если groupId у вас является приватным свойством, то скорее всего тестировать надо не сам groupId, а тот публичный метод, который его использует (например, SomeMethod). Этот вопрос подробно расписан в C# - Как тестрировать private и protected методы, со всеми за и против такого тестирования.
Комментариев нет:
Отправить комментарий