Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генерация аксессоров в Unit-test'ах 
V
    Опции темы
Bladerender
Дата 17.10.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



 smile 

Вообщем такая тема. Для тех кто знаком с юнит тестированием и такой его неприятной стороной как аксессоры вопрос.

есть такое:

class ClassName

{
private List<string> _collectionName = new List<string>();

private string[] _arrayName;

}

При генерации акесооров на приватные поля полцчается что через аксесор я могу доступится к acsessor._arrayName но _collectionName  есть недоступен, т.к. на него не генеритуется аксесор. То же самое получается и с Dictionary<T key, T value>. По наблюдениям я понял что аксессоры не генерируются на обобщенные коллекции. Это так или я ошибаюсь?


PM MAIL   Вверх
Bladerender
Дата 30.10.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



up
PM MAIL   Вверх
ivashkanet
Дата 30.10.2007, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Bladerender, честно... нихрена непонятно что ты хочешь...  smile 

Юнит тестирование может протестировать (и должно) только интерфейс класса, а не его внутреннюю логику. Т.е. только то, что помечено Public.
Аксессоры это property {get}? Тогда они никогда сами не генерируются, все делается ручками...

 smile 
PM MAIL WWW ICQ   Вверх
Wizard_Memfis
Дата 30.10.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 12.2.2007
Где: г. Донецк, Украин а

Репутация: 1
Всего: 4



Согласен, вопрос не понятен! smile 
Но все же:
Код

class ClassName

{
private List<string> _collectionName = new List<string>();

private string[] _arrayName;

}

[Test]
public void test()
{
ClassName o=new ClassName();
Type type = o.GetType();
FieldInfo collectionField = type.GetField("_collectionName ", BindingFlags.NonPublic | BindingFlags.Instance);
if (collectionField == null)
{
       throw new Exception("Cannot access _collectionName field!");
}
object value = new List<string>();
collectionField .SetValue(o, value);
}

Напиши подробнее что надо! smile 
--------------------
www.binary-studio.com
PM MAIL WWW ICQ Skype   Вверх
Zapozidon
Дата 30.10.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 26.8.2007

Репутация: 1
Всего: 1



Стандартное решение - наследоваться от своего класса, сделав доступ к нужным вещам и использовать этот тестовый класс. Главное в наследовании не провтыкать.
PM MAIL   Вверх
ivashkanet
Дата 30.10.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Wizard_Memfis @  30.10.2007,  14:22 Найти цитируемый пост)
FieldInfo collectionField = type.GetField("_collectionName ", BindingFlags.NonPublic | BindingFlags.Instance);

И что? Это можно сделать? что за пи..?
Ненавижу МС за такую шнягу (кста таких дырок во фреймворке завались)  smile

Добавлено через 38 секунд
Zapozidon, наследник не имеет доступ к приватным полям  smile 
PM MAIL WWW ICQ   Вверх
Zapozidon
Дата 30.10.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 26.8.2007

Репутация: 1
Всего: 1



Ну это само-собой разумеется, что надо все переделать под protected (подразумевается, что тестишь свой класс). Во всяком случае юзать рефлексию - не выход.
PM MAIL   Вверх
Wizard_Memfis
Дата 31.10.2007, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 12.2.2007
Где: г. Донецк, Украин а

Репутация: 1
Всего: 4



Да, это работает
Код

FieldInfo collectionField = type.GetField("_collectionName ", BindingFlags.NonPublic | BindingFlags.Instance);

при этом можно и получить значение поля и установиьт его!Так же мона и private, и static, и protected функцию вызвать!
Ну а так согласен с ivashkanet, я сам не в восторге от этого!
 smile 
--------------------
www.binary-studio.com
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0708 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.