#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 методы, со всеми за и против такого тестирования.
Комментариев нет:
Отправить комментарий