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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> система автоматического тестирования прогрраммы 
:(
    Опции темы
ДобренькийПапаша
Дата 11.12.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Хорош бредить, тот код, который вы привели полное ###. Вам на это указали. Форматирование и именование производиться в соответствии со спецификацией, а не как моей задней левой вздумается.

Серьёзные люди такого не пишут. 


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
gwi52
Дата 11.12.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это нервы...
"... учись воспринимать любой вид ..." DenWPF
Уже не интересно...
Гуд бай !
PM MAIL   Вверх
KuMa1104
Дата 12.12.2009, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

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



Хм...
Да интерестный вышел спор.

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

На ваш взгляд, есть ли некое универсальное правило?
Применяем в этих случаях и не требуется в этих.




Это сообщение отредактировал(а) KuMa1104 - 12.12.2009, 00:39


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Exai1e
Дата 12.12.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



будет ли желание приводить к примеру такой код к "нужному виду" (тут изменено только форматирование, без использования ужасных имен переменных)
Код

using System;using System.Collections.Generic;
using System.Text;using System.IO;using System.Runtime.Serialization.Formatters.Binary;

namespace TSACore
{
    #region QuestionExceptionClasses    public class QuestionFoundException : 
ApplicationException    {
        public QuestionFoundException(string pMessage) :
            base(pMessage) {}
    }

    public class QuestionNotFoundException : ApplicationException
    {        public QuestionNotFoundException(string pMessage) :
            base(pMessage) 

}
    }

    public class ParamsNotCorrectException : 
ApplicationException
    {
        public ParamsNotCorrectException(string pMessage) :
            base(pMessage) 

}
    }

    #endregion

    [Serializable]
    public class CurrentTest    {
        //Название теста
        public string TestName {
 set; get;
 }

        //Список вопросов
        private List<Question> questionList = new List<Question>();

        //Сортировка номеров вопросов
        private void SortQuestionList()        {
            for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                questionList[questionIndex].QuestionIndex = questionIndex;        }

        //Получение общего чиста вопросов
        public int GetQuestionCount()        {




            return questionList.Count;
        }

        //Получение списка ответов (заголовки)
        public List<string> GetCaptionQuestionList()


   {
            List<string> _returnValue = new List<string>();
            foreach (Question curQuestion in questionList)


                _returnValue.Add(curQuestion.QuestionCaption);

            return _returnValue;
        }

        //Получение списка ответов (заголовки) (параметр - заголовок вопрос)
        public List<string> GetCaptionReplyList(string pQuestionCaption)
        {
            for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)                if (questionList[questionIndex].QuestionCaption.Equals(pQuestionCaption))
               {                    List<string> _returnValue = new List<string>();
                    foreach (Reply curReply in questionList[questionIndex].ReplyList)
                        _returnValue.Add(curReply.ReplyCaption);
                    return _returnValue;                }
            return null;     }

        //Получение списка ответов (заголовки) (параметр - индекс вопрос)
        public List<string> GetCaptionReplyList(int pQuestionIndex)
        {
            for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)                if (questionList[questionIndex].QuestionIndex == pQuestionIndex)              {
                    List<string> _returnValue = new List<string>();
                    foreach (Reply curReply in questionList[questionIndex].ReplyList)




                        _returnValue.Add(curReply.ReplyCaption);
                    return _returnValue;          }
            return null;     }

        //Получение списка ответов (параметр - заголовок вопрос)
        public List<Reply> GetReplyList(string pQuestionCaption)
        {
            for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                if (questionList[questionIndex].QuestionCaption.Equals(pQuestionCaption))
                    return questionList[questionIndex].ReplyList;
            return null;       }
        //Получение списка ответов (параметр - индекс вопрос)        public List<Reply> GetReplyList(int pQuestionIndex)    {
            for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                if (questionList[questionIndex].QuestionIndex == pQuestionIndex)
                    return questionList[questionIndex].ReplyList;            return null;      }

        //Добавить вопрос
        public void AddQuestion(string pQuestionCaption, List<Reply> pReplyList)
        {
            if ((pQuestionCaption.Length > 0) && (pReplyList != null))
            {                for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                    if (questionList[questionIndex].QuestionCaption.Equals(pQuestionCaption))                        throw new QuestionFoundException("Такой вопрос уже существует в тесте");
                questionList.Add(new Question(pQuestionCaption, pReplyList));                SortQuestionList();
            }
            else
                throw new ParamsNotCorrectException("Заданные не верные параметры");
        }

        //Удалить вопрос
        public void RemoveQuestion(string pQuestionCaption)
        {            if (pQuestionCaption.Length > 0)            {
                bool _searchResult = false;





                for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                    if (questionList[questionIndex].QuestionCaption.Equals(pQuestionCaption))                        _searchResult = questionList.Remove(questionList[questionIndex]);
                if (_searchResult)                    SortQuestionList();
                else                    throw new QuestionNotFoundException("Вопроса в тесте не существует");
            }
            else
                throw new ParamsNotCorrectException("Заданные не верные параметры");
        }

        //Редактировать вопрос
        public void EditQuestion(string pOldQuestionCaption, string pNewQuestionCaption, List<Reply> pReplyList)
        {            if ((pOldQuestionCaption.Length > 0) && (pNewQuestionCaption.Length > 0) && (pReplyList != null))
            {                bool _searchResult = false;
                for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                    if (questionList[questionIndex].QuestionCaption.Equals(pOldQuestionCaption))
                    {
                        questionList[questionIndex].QuestionCaption = pNewQuestionCaption;
                        questionList[questionIndex].ReplyList = pReplyList;










                        _searchResult = true;
                    }                if (!_searchResult)
                    throw new QuestionNotFoundException("Вопроса нет в тесте");
            }
            else
                throw new ParamsNotCorrectException("Заданные не верные параметры");
        }

        //Сохранить тест в файл
        public bool SaveTest(string pFileName)
        {            if ((pFileName.Length > 0) && (this.TestName.Length > 0))
            {                using (FileStream file = new FileStream(pFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                {                    try
                    {                        BinaryFormatter _binFormatter = new BinaryFormatter();
                        _binFormatter.Serialize(file, this);
                        return true;                    }
                    catch { return false; }                }            }
            return false;        }

        //Загрузить тест из файла
        public static CurrentTest LoadTest(string pFileName)
        {            if ((pFileName.Length > 0) && (File.Exists(pFileName)))
            {                using (FileStream file = new FileStream(pFileName, FileMode.Open, FileAccess.Read))
                {                    try
                    {
                        BinaryFormatter _binFormatter = new BinaryFormatter();
                        return (CurrentTest)_binFormatter.Deserialize(file);
                    }











                    catch { return null; }
                }
            }            return null;
        }
    }
}



или хотелось бы видеть сразу более читаемый код ?
Код

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace TSACore
{

    #region QuestionExceptionClasses

    public class QuestionFoundException : ApplicationException
    {
        public QuestionFoundException(string pMessage) :
            base(pMessage) { }
    }

    public class QuestionNotFoundException : ApplicationException
    {
        public QuestionNotFoundException(string pMessage) :
            base(pMessage) { }
    }

    public class ParamsNotCorrectException : ApplicationException
    {
        public ParamsNotCorrectException(string pMessage) :
            base(pMessage) { }
    }

    #endregion

    [Serializable]
    public class CurrentTest
    {
        //Название теста
        public string TestName { set; get; }

        //Список вопросов
        private List<Question> questionList = new List<Question>();

        //Сортировка номеров вопросов
        private void SortQuestionList()
        {
            for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                questionList[questionIndex].QuestionIndex = questionIndex;
        }

        //Получение общего чиста вопросов
        public int GetQuestionCount()
        {
            return questionList.Count;
        }

        //Получение списка ответов (заголовки)
        public List<string> GetCaptionQuestionList()
        {
            List<string> _returnValue = new List<string>();
            foreach (Question curQuestion in questionList)
                _returnValue.Add(curQuestion.QuestionCaption);
            return _returnValue;
        }

        //Получение списка ответов (заголовки) (параметр - заголовок вопрос)
        public List<string> GetCaptionReplyList(string pQuestionCaption)
        {
            for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                if (questionList[questionIndex].QuestionCaption.Equals(pQuestionCaption))
                {
                    List<string> _returnValue = new List<string>();
                    foreach (Reply curReply in questionList[questionIndex].ReplyList)
                        _returnValue.Add(curReply.ReplyCaption);
                    return _returnValue;
                }
            return null;
        }

        //Получение списка ответов (заголовки) (параметр - индекс вопрос)
        public List<string> GetCaptionReplyList(int pQuestionIndex)
        {
            for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                if (questionList[questionIndex].QuestionIndex == pQuestionIndex)
                {
                    List<string> _returnValue = new List<string>();
                    foreach (Reply curReply in questionList[questionIndex].ReplyList)
                        _returnValue.Add(curReply.ReplyCaption);
                    return _returnValue;
                }
            return null;
        }

        //Получение списка ответов (параметр - заголовок вопрос)
        public List<Reply> GetReplyList(string pQuestionCaption)
        {
            for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                if (questionList[questionIndex].QuestionCaption.Equals(pQuestionCaption))
                    return questionList[questionIndex].ReplyList;
            return null;
        }
        //Получение списка ответов (параметр - индекс вопрос)
        public List<Reply> GetReplyList(int pQuestionIndex)
        {
            for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                if (questionList[questionIndex].QuestionIndex == pQuestionIndex)
                    return questionList[questionIndex].ReplyList;
            return null;
        }

        //Добавить вопрос
        public void AddQuestion(string pQuestionCaption, List<Reply> pReplyList)
        {
            if ((pQuestionCaption.Length > 0) && (pReplyList != null))
            {
                for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                    if (questionList[questionIndex].QuestionCaption.Equals(pQuestionCaption))
                        throw new QuestionFoundException("Такой вопрос уже существует в тесте");
                questionList.Add(new Question(pQuestionCaption, pReplyList));
                SortQuestionList();
            }
            else
                throw new ParamsNotCorrectException("Заданные не верные параметры");
        }

        //Удалить вопрос
        public void RemoveQuestion(string pQuestionCaption)
        {
            if (pQuestionCaption.Length > 0)
            {
                bool _searchResult = false;
                for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                    if (questionList[questionIndex].QuestionCaption.Equals(pQuestionCaption))
                        _searchResult = questionList.Remove(questionList[questionIndex]);
                if (_searchResult)
                    SortQuestionList();
                else
                    throw new QuestionNotFoundException("Вопроса в тесте не существует");
            }
            else
                throw new ParamsNotCorrectException("Заданные не верные параметры");
        }

        //Редактировать вопрос
        public void EditQuestion(string pOldQuestionCaption, string pNewQuestionCaption, List<Reply> pReplyList)
        {
            if ((pOldQuestionCaption.Length > 0) && (pNewQuestionCaption.Length > 0) && (pReplyList != null))
            {
                bool _searchResult = false;
                for (int questionIndex = 0; questionIndex < questionList.Count; questionIndex++)
                    if (questionList[questionIndex].QuestionCaption.Equals(pOldQuestionCaption))
                    {
                        questionList[questionIndex].QuestionCaption = pNewQuestionCaption;
                        questionList[questionIndex].ReplyList = pReplyList;
                        _searchResult = true;
                    }
                if (!_searchResult)
                    throw new QuestionNotFoundException("Вопроса нет в тесте");
            }
            else
                throw new ParamsNotCorrectException("Заданные не верные параметры");
        }

        //Сохранить тест в файл
        public bool SaveTest(string pFileName)
        {
            if ((pFileName.Length > 0) && (this.TestName.Length > 0))
            {
                using (FileStream file = new FileStream(pFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                {
                    try
                    {
                        BinaryFormatter _binFormatter = new BinaryFormatter();
                        _binFormatter.Serialize(file, this);
                        return true;
                    }
                    catch { return false; }
                }
            }
            return false;
        }

        //Загрузить тест из файла
        public static CurrentTest LoadTest(string pFileName)
        {
            if ((pFileName.Length > 0) && (File.Exists(pFileName)))
            {
                using (FileStream file = new FileStream(pFileName, FileMode.Open, FileAccess.Read))
                {
                    try
                    {
                        BinaryFormatter _binFormatter = new BinaryFormatter();
                        return (CurrentTest)_binFormatter.Deserialize(file);
                    }
                    catch { return null; }
                }
            }
            return null;
        }

    }
}


Добавлено @ 18:04
лично мне, было бы приятнее сразу видеть второй вариант из этих двух

Добавлено @ 18:08
Цитата

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. ©


Это сообщение отредактировал(а) Exai1e - 12.12.2009, 18:26


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


Эксперт
***


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

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



Он считает, что надо писать говёно, чтобы говорить: "Зри в корень!, а не на форму. Учись читать любой код!".
Чтению кода посвещены книги, которые предлагают кое-какие советы для разбора чужого кода. Учится тут ничему не надо (сугубо практика).
Это не значит что ты должен писать говёный код, чтобы говорить "Практикуйтесь!".
Учится надо писать нормальный код.

Это сообщение отредактировал(а) ДобренькийПапаша - 12.12.2009, 20:00


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
mr.Anderson
Дата 12.12.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



К вопросу о том, как форматировать код... Используйте в студии ReSharper и будьте счастливы, авто-реформат во время написания и нажатием пары кнопок для всего кода. И никаких проблем со стандартизацией и фразами "а мне удобно". Не мне удобно, а как надо! Кстати, дело привычки, поэтому к "как надо" тоже привыкнуть легко. Было бы желание.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
wester
Дата 12.12.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вроде тема о юнит тестах 

объясните , почему мы обсуждаем редкостный г@код?
а вообще да, Resharper очень сильно помогает с рутинными действиями
PM MAIL   Вверх
gwi52
Дата 12.12.2009, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мужики! Вы зачем здесь собрались?

Откройте отдельную тему по форматированию текста и кувыркайтесь там до посинения.
Здесь же автор темы задал простой и конкретный вопрос по тестингу.
Я привел 20 строк текста программы, в которой была изложена концепция тестирования. 
Ровно через 5 минут от Папаши появился отклик, из которого следует, что Папаше моя программа понятна, но как-то не совсем нравится.
Последние два поста содержат видимо различные варианты чего-то одного. Но каждый вариант - это 200 строк не очень простого кода.
Сравните мои 20 строк, которые через пару минут понятны любому, и 2x200, анализировать которые нет никакого желания.
Не забывайте, читабельность - это, прежде всего, компактность и обозримость.
Все, эта тема закрыта.

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

На последний вопрос автора темы отвечу так. Если для Вас программирование - это приятная прогулка, то тестировать не надо, не забивайте себе голову всякой ерундой. Но если это Ваш хлеб, если Вы цените свою клиентуру и, главное, свое реномe, если Вы разумно ленивы, т.е. не хотите через месяцы и годы возвращаться к своим давно забытым программам для устранения дефектов, то отнеситесь к тестированию со всей серьезностью.
Моя дочь, программер, трудится в Америке в одной не очень крутой, но очень ответственной дивелоперской фирме, которая жесточайшим образом регламентирует не только форматирование текста программ, но и тестирование каждого произведенного модуля, т.е. они параллельно создают библиотеку тестов, доступную по любому поводу и для любого модуля. И это очень и очень правильно. Не получается быстренько что-нибудь попрограммировать.
PM MAIL   Вверх
ДобренькийПапаша
Дата 13.12.2009, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(gwi52 @ 12.12.2009,  21:51)
Они параллельно создают библиотеку тестов, доступную по любому поводу и для любого модуля. И это очень и очень правильно. Не получается быстренько что-нибудь попрограммировать.


Останусь при своём мнении. В вырожденных случаях этого делать не стоит. Например в вашем коде вначале, тест не нужен. 


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
gwi52
Дата 13.12.2009, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Почти согласен - такой пример считается на счетах, а лучше в уме.
Конечно, я никакой не максималист - возраст не позволяет.
Но здесь изложена только концепция, и, для упрощения, чтобы акцентировать Ваше внимание на главном, намеренно предложен максимально простой пример.
Однако, если воспользоваться грамотным тестированием, то даже здесь можно выявить экстремум (переполнение или еще какое-либо ограничение, например, такое - не может быть у меня денег больше, чем 100 баксов), который следовало бы отсечь сразу, чтобы забыть о нем навсегда.
Но, я не настаиваю, в конечном счете, у меня тоже есть масса программ, которые я считаю абсолютно надежными. Но есть и такие, которые оттестировать можно только качественно, исходя из совершенно иных, априорных принципов - в этом то и проблема...
PM MAIL   Вверх
gwi52
Дата 19.12.2009, 03:11 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Sorry! Пресловутое форматирование.

Всем привет!

И все таки не дает мне покоя программа в этой теме от автора Exai1e, 12.12.2009, 18:02.
Отсутствие критики этой программы и популярность темы, >250 просмотров, видимо,
требует от меня пояснений. 

При всем уважении к Exai1e, человек за деревьями не увидел леса. 
Он представил нам образец форматирования текста программы,
в которой собран весь возможный утилитарный сервис по вводу тестовых примеров, 
редактированию, копированию, сохранению и пр. Но идея оперативного тестирования 
в этой программе отсутствует. А вся соль-то именно в оперативности.

Попытаюсь на примере программы (см.дальше) объяснить более подробно.

Исходный класс, myClass, содержит 4 метода, Summary,Sum,Mul,Div, 
для вычисления несложной арифметики с такой же несложной ограничительной логикой.
Тестирующий класс, tester, содержит аналогично названные методы,
в каждом из которых формируется список тестовых образцов типа List<string>, 
в которых наряду с исходными параметрами записывается ожидаемый результат вычисления.
Затем эти образцы поочередно подсовываются в тестируемый метод исходного класса и 
сравниваются с ожидаемым результатом, несовпадение сопровождается соответствующим 

сообщением.
Тестирование инициируется кнопкой buttonTest после отметки соответствующей радио-кнопки,
вычисление инициируется кнопкой buttonStart после заполнения соответствующих текст-боксов.
Все контролы расположены рядом.

Можно легко протестировать любой исходный метод независимо от других и 
можно протестировать итоговый исходный метод, в котором используются все остальные методы.

Подчеркну, в проект одновременно включаются как исходные классы, так и тестирующие,
т.е. параллельно создаются две библиотеки - библиотека исходных классов и библиотека 

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

Никакого дополнительного утилитарного сервиса не требуется, поскольку каждый тест 
вместе со всеми своими образцами тестирования создается, редактируется, копируется и пр. 
также, как и любая другая программа.

Всегда при создании программы, после ее написания, мы хоть как-то должны ее оттестировать.
Но наряду с прощелкиванием и прослеживанием хода вычислений по контрольным точкам,
очень удобно контролировать программу с помощью всегда доступных полноценных тестов.
Не упускайте эту возможность. 


Код

public partial class Form1     : Form
{    public    Form1    ()    {    InitializeComponent();    }
    private void buttonStart_Click    (object sender, EventArgs e)    
    {    myClass MyClass=new myClass(Convert.ToInt32(textBox_A.Text));    
        textBox_Result.Text    =    MyClass.Summary
                               (Convert.ToInt32(textBox_B.Text),Convert.ToInt32(textBox_C.Text),Convert.ToInt32
                                 (textBox_D.Text),Convert.ToInt32(textBox_E.Text)).ToString();
    }
    private void buttonTest_Click    (object sender, EventArgs e)
    {    tester Test=new tester();
        if    (radioButton_Summary.Checked)    Test.Summary();
        if    (radioButton_Sum.Checked)        Test.Sum();
        if    (radioButton_Mul.Checked)        Test.Mul();
        if    (radioButton_Div.Checked)        Test.Div();
}    }
public class myClass                //    Тестируемый класс
{    public    myClass    ( int a )    {   A=a;     }
    public    myClass    ()        {   A=0;     }
    public    int        A;                    
    public    double    Summary    ( int b, int c, int d, int e )    
       {
           double p=Div(Sum(b,c)+Mul(d,e));    return p;
    }
    public    int        Sum           ( int b, int c )
    {     int p=b+c<0?0:b+c>100?100:b+c;
           return p;
    }
    public    int        Mul        ( int d, int e )
    {    int p=d*e<5?5:d*e>100?100:d*e;
        return p;
    }
    public    double    Div        (int f    )    
    {    double p=A!=0?(double)f/(double)A:0;
            return p;
        }
}
public class tester
{    List<string> S;    
        string [] s;
    myClass MyClass;
    public    void        Summary    ()    
    {    S=new List<string>();    
        S.Add    ("0 1 2 3 4 0");            //    Тестовые образцы
        S.Add    ("1 2 3 4 5 25");
        for  (int i=0;i<S.Count;i++)
        {    s=S[i].Split(' ');
            MyClass=new myClass (Convert.ToInt32(s[0]));
            double dResult=MyClass.Summary    
                                (Convert.ToInt32(s[1]),Convert.ToInt32(s[2]),Convert.ToInt32(s[3]),Convert.ToInt32(s[4]));
                if  (dResult!=Convert.ToInt32(s[5])) 
                            MessageBox.Show ("myClass.Summary - Sample № "+i.ToString(), "Error");
    }    }
    public    void    Sum    ()    
    {    S=new List<string>();
        MyClass=new myClass();
        S.Add    ("0 -1 0");                    //    Тестовые образцы
        S.Add    ("1 2 3");
        S.Add    ("100 200 100");
        for  (int i=0;i<S.Count;i++)
        {    s=S[i].Split(' ');
            int I=MyClass.Sum    (Convert.ToInt32(s[0]),Convert.ToInt32(s[1]));
            if  (I!=Convert.ToInt32(s[2])) 
                                   MessageBox.Show ("myClass.Sum - Sample № "+i.ToString(), "Error");
    }    }
    public    void    Mul    ()
    {    S=new List<string>();    
        MyClass=new myClass();
        S.Add    ("2 2 5");                        //    Тестовые образцы
        S.Add    ("2 3 6");
        S.Add    ("5 100 100");
        for  (int i=0;i<S.Count;i++)
        {    s=S[i].Split(' ');
            int I=MyClass.Mul    (Convert.ToInt32(s[0]),Convert.ToInt32(s[1]));
            if  (I!=Convert.ToInt32(s[2])) 
                             MessageBox.Show ("myClass.Mul - Sample № "+i.ToString(), "Error");
    }    }
    public    void    Div    ()
    {    S=new List<string>();
        S.Add    ("2 2 1");                        //    Тестовые образцы
        S.Add    ("2 3 1.5");
        S.Add    ("0 3 0");
        for  (int i=0;i<S.Count;i++)
        {    s=S[i].Split(' ');
            MyClass=new myClass(Convert.ToInt32(s[0]));
            double D=MyClass.Div    (Convert.ToInt32(s[1]));
            if  (D!=Convert.ToDouble(s[2])) 
                            MessageBox.Show ("myClass.Div - Sample № "+i.ToString(), "Error");
}    }    }

PM MAIL   Вверх
PashaPash
Дата 20.12.2009, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



gwi52, не изобретайте велосипед, используйте встроенные тесты студии. Или nUnit.

По поводу форматирования - проявите уважение к остальным участникам. Человек может съесть любое д прочитать любое спагетти, но не стоит после спрашивать его о вкусе и послевкусии.


--------------------
PM MAIL WWW   Вверх
Любитель
Дата 20.12.2009, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



-



--------------------
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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