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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Unit тесты в VS2008 
:(
    Опции темы
Экскалупатор
Дата 3.7.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



всем привет. подскажите кто знает толковое руководство по написанию тестов в VS2008. нужна не теория, а именно описание что для чего и как писать, желательно с примерами на вроде:
"имеем такой класс/метод для того что бы его протестировать пишем следующий код, вот так передаем параметры, вот так получаем ответы..." т.е. для "чайников", так сказать с нуля...
заранее спасибо.
PM MAIL ICQ   Вверх
Exai1e
Дата 3.7.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Экскалупатор, например
http://habrahabr.ru/blogs/net/98062/
а вообще в гугле, довольно много инфы, как создавать тесты в студии и т.д.


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Экскалупатор
Дата 3.7.2010, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Exai1e, спасибо, буду читать.
в гугле я всегда ищу в первую очередь, но не всегда получается найти.
PM MAIL ICQ   Вверх
Экскалупатор
Дата 4.7.2010, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



почитал по ссылке выше, вроде все понятно, но не понятным остался следующий вопрос: можно ли каким то образом создать коллекцию входных и выходных параметров, но так что бы при не выполнении теста было видно какой именно набор выдал неверный результат. 
я для примера сделал такой метод:
Код

public double Calculate(int a, int b)
        {
            return a / b;
        }


и тест к нему:
Код

public void CalculateTest()
        {
            Program target = new Program();
            for (int i = 0; i < 10; ++i)
            {
                for (int j = 0; j < 10; ++j)
                {
                    int a = i; // TODO: Initialize to an appropriate value
                    int b = j; // TODO: Initialize to an appropriate value
                    double expected = i/j; // TODO: Initialize to an appropriate value
                    double actual;
                    actual = target.Calculate(a, b);
                    Assert.AreEqual(expected, actual);
                }
            }
        }

естественно что я получаю ошибку деления на ноль, при чем ошибка получается в самом тесте а не в тестируемом методе. вопрос как написать тест, что бы можно было проверить те же наборы входных параметров. единственный вариант который у меня придумывается это просто писать все варианты по очереди, к примеру:
Код

public void CalculateTest()
        {
            Program target = new Program();

                    Assert.AreEqual(1, target.Calculate(1, 1));
                    Assert.AreEqual(1, target.Calculate(2, 2));
                    Assert.AreEqual(0, target.Calculate(0, 1));
                    Assert.AreEqual(0, target.Calculate(1, 0));
.....еще много этих строчек.....
        }

но такой вариант мне кажется крайне неудобным, не ужели нету чего то более удобного?

Это сообщение отредактировал(а) Экскалупатор - 4.7.2010, 01:01
PM MAIL ICQ   Вверх
Экскалупатор
Дата 4.7.2010, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



разобрался с коллекциями, в принципе все оказалось довольно тривиально, можно использовать обычные массивы, списки и прочее(просто сразу думалось что тесты эти как то по другому работают).
в процессе возник другой вопрос: как тестировать приватные методы?
PM MAIL ICQ   Вверх
Exai1e
Дата 4.7.2010, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Экскалупатор, думаю что на уровне метода
Код

private void MyMethod()
{
...
            #if DEBUG

            Assert.AreEqual(....);

            #endif
...
}



--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Экскалупатор
Дата 4.7.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



может быть, но дело в том что студия умеет это делать, она генерит какой то интересный код и тестирует приватные методы. к примеру если тот метод что я привел выше делать тест, то студия делает такой код:
Код

[Shadowing("ConsoleApplication1.Program")]
    public class Program_Accessor : BaseShadow
    {
        protected static PrivateType m_privateType;

        [Shadowing(".ctor@0")]
        public Program_Accessor();
        public Program_Accessor(PrivateObject __p1);

        public static PrivateType ShadowedType { get; }

        public static Program_Accessor AttachShadow(object __p1);
        [Shadowing("Calculate@2")]
        public double Calculate(int a, int b);
        [Shadowing("Main@1")]
        public static void Main(string[] args);
    }

и дальше в тесте
Код

            Program_Accessor target = new Program_Accessor(); // TODO: Initialize to an appropriate value
                    int a = 1;
                    int b = 1;
                    double expected = 1;
                    double actual;
                    actual = target.Calculate(a, b);
                    Assert.AreEqual(expected, actual);

а вот как это все называется? и где про это прочесть...

Это сообщение отредактировал(а) Экскалупатор - 4.7.2010, 10:41
PM MAIL ICQ   Вверх
jonie
Дата 4.7.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



читать про TDD


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Mephisto
Дата 4.7.2010, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Когда тестируешь какой-то класс, или взаимодействие интерфейсов сочетанием тестов, то необходимо разделять тестируемые методы:
1 метод: ожидает корректные данные. Грузишь в метод данные и проверяешь результат.
остальные методы: исключительные ситуации. Т.е. сами методы загружают некорректные данные и в результате ожидаешь исключения вполне определенных типов.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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