Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/48: Рейтинг темы: голосов - 48, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54

Внедрение NUnit-тестов в проект

06.10.2013, 07:24. Показов 10025. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, форумчане. Написал программу, теперь интересует как внедрить в нее NUnit тесты. Прочитал статей, ничего толком не понял. Цель: добавить unit тесты class equation: 1к, 2к вещ, 2к комп, а=0, ввод чисел
Прошу помочь разобраться новичку.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using NUnit.Framework;
using System.Globalization;//system.globalization - для конверт ту сингл, иначе точку не распознает
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            equation eq = new equation();
            eq.print();
            eq.calculate();
            Console.ReadKey();
        }
    }//class program
    [TestFixture]
    class equation
    {
        private float a;
        private float b;
        private float c;
        public equation()
        {
            a = input("a", "Введите первый коэффициент, не равный нулю:");
            b = input("b", "Введите второй коэффициент, не равный нулю:");
            c = input("c", "Введите третий коэффициент:");
        }
        
        public void print()
        {
            Console.WriteLine("Полученное уравнение: {0}a^2+{1}b+{2}",a,b,c);
        }
        
        public void calculate()
        {
            double d;
            d = b * b - 4 * a * c;
            Console.WriteLine("Дискриминант равен {0}",d);
            if (d<0)// с комплексными - сделано
            {
                Console.WriteLine("x1 = ({0}+({1}^(1/2))*i)/(2*{2})", -b, d, a);
                Console.WriteLine("x2 = ({0}-({1}^(1/2))*i)/(2*{2})", -b, d, a);
            }
            else if (d==0)
            {
                if(-b/(2*a) % 1 == 0)
                    Console.WriteLine("x = {0}", -b/(2*a));
                else
                    Console.WriteLine("x = {0}/{2}",-b,2*a);
            }
            else if (d > 0)
            {
                if(((-b+Math.Sqrt(d))/(2*a)) % 1 == 0)
                    Console.WriteLine("x1 = {0}",(-b+Math.Sqrt(d))/(2*a));
                else
                    Console.WriteLine("x1 = ({0})/({1})", (-b + Math.Sqrt(d)), a * 2);
                if(((-b-Math.Sqrt(d))/(2*a)) % 1 == 0)
                    Console.WriteLine("x2 = {0}",(-b-Math.Sqrt(d))/(2*a));
                else
                    Console.WriteLine("x2 = ({0})/({1})", (-b - Math.Sqrt(d)), a * 2);
            }
        }
        
        //проверяет коэффициенты на соответствие требованиям.
        private float input(string name, string msg)
        {
            Console.WriteLine(msg);
            string temp = Console.ReadLine();
            const string regexp = @"[0-9]*([\.,]?[0-9]*)?";
            const string regexp2 = @"0*([\.,]?0*)?";
            while ((name != "c" && (regCheck(temp, regexp2) || !regCheck(temp, regexp))) ||
            (name == "c" && !regCheck(temp, regexp)))
            {
                Console.WriteLine("Ошибка!\nЗначение {0} введено неверно!\n" +
                                  "Введите верное число, или q для выхода:",name);
                if(temp == "q")
                    Environment.Exit(0);
                temp = Console.ReadLine();
            }
            return Convert.ToSingle(temp, new CultureInfo("en-US"));
        }
 
        //Костыль на регулярки.длина совпадения будет не равна длине переданной строки, вернет фалс
        private bool regCheck(string str, string regexp)
        {
            Match m = Regex.Match(str, regexp);
            if(m.Length != str.Length)
                return false;
            else
                return true;
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.10.2013, 07:24
Ответы с готовыми решениями:

Проверка тестов NUnit
Здравствуйте, дан код, сказано протестировать его, наборами из групп тестов, с помощью утилит NUnit и FxCop using System; using...

Программист по внедрению 1C внедрение 1С 8.2; УПП (проект, возможно трудоустройство в штат) Москва от 130000 руб
В компании «Simplex» открыта вакансия: Программист по внедрению 1C внедрение 1С 8.2; УПП (проект, возможно трудоустройство в штат) ...

"Внедрение" файла в проект
Всем привет. Появилась небольшая проблема при написании программы. Есть xml-файл , в нем хранятся некие данные. Проблема состоит в том...

16
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
08.10.2013, 20:38
Видимо вы не поняли сути тестов. Они автономны и выполняются без внимания разработчика. Console.ReadLine() - в них недопустим.

Тоже долго не понимал зачем это надо, пока не прочитал "Сандерсон С., Фримен А. ASP.NET MVC3 Framework с примерами на C# для профессионалов (3-е издание, 2012)", насколько я помню - введению в модульное тестирование они посвятили целую главу. Объясняется все доступно и с примерами.

Еще для постижения сути можно заглянуть на рсдн
1
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
09.10.2013, 01:28  [ТС]
freeba, мне не понятна суть того что от меня хотят. Что за 1к, 2к, 2к комплекс и т.д.
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
09.10.2013, 11:54
1к - один корень
2к - два корня
1к комп - один корень в виде дроби
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
09.10.2013, 13:17  [ТС]
Ну хорошо, с этим разобрались. А для чего им тесты нужны и что именно в них тестировать?
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
09.10.2013, 20:40
Цитата Сообщение от Xendler Посмотреть сообщение
А для чего им тесты нужны
В данном случае они не нужны.
Цитата Сообщение от Xendler Посмотреть сообщение
что именно в них тестировать?
Конкретные случаи:
- Набор параметров на которых выдается 1 корень
- Набор параметров на которых выдается 2 корня
- Набор параметров при которых корни это натуральные дроби
etc.
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
10.10.2013, 15:39  [ТС]
freeba, не подскажете как правильно составить тест хотя бы для проверки когда 1к?
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
10.10.2013, 15:43
Xendler, для этого необходимо ввод (Console.ReadLine()) вычленить из класса и вывод тоже.
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
10.10.2013, 15:44  [ТС]
Петррр, подробнее, т.к. в программировании ноль
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
10.10.2013, 19:09
Цитата Сообщение от Xendler Посмотреть сообщение
в программировании ноль
Печально.

Чтобы добавить модульные тесты - нужно иметь модуль который тестируем. Засим правим ваш код примерно до такого:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
 
namespace ConsoleApplication3
{
    public class Program
    {
        static void Main(string[] args)
        {
            equation eq = new equation();
            eq.print();
            Console.WriteLine(eq.calculate());
            Console.ReadKey();
        }
    }//class program
 
 
    public class equation
    {
        private float a;
        private float b;
        private float c;
 
        public equation()
        {
            a = input("a", "Введите первый коэффициент, не равный нулю:");
            b = input("b", "Введите второй коэффициент, не равный нулю:");
            c = input("c", "Введите третий коэффициент:");
        }
 
        public equation(float a, float b, float c)
        {
            this.a = a;
            this.b = b;
            this.c = c;
        }
 
        public void print()
        {
            Console.WriteLine("Полученное уравнение: {0}a^2+{1}b+{2}", a, b, c);
        }
 
        public string calculate()
        {
            double d;
            string result = string.Empty;
 
            d = b * b - 4 * a * c;
            Console.WriteLine("Дискриминант равен {0}", d);
            if (d < 0)// с комплексными - сделано
            {
                result += string.Format("x1 = ({0}+({1}^(1/2))*i)/(2*{2})", -b, d, a);
                result += string.Format("x2 = ({0}-({1}^(1/2))*i)/(2*{2})", -b, d, a);
            }
            else if (d == 0)
            {
                if (-b / (2 * a) % 1 == 0)
                    result += string.Format("x = {0}", -b / (2 * a));
                else
                    result += string.Format("x = {0}/{2}", -b, 2 * a);
            }
            else if (d > 0)
            {
                if (((-b + Math.Sqrt(d)) / (2 * a)) % 1 == 0)
                    result += string.Format("x1 = {0}", (-b + Math.Sqrt(d)) / (2 * a));
                else
                    result += string.Format("x1 = ({0})/({1})", (-b + Math.Sqrt(d)), a * 2);
                if (((-b - Math.Sqrt(d)) / (2 * a)) % 1 == 0)
                    result += string.Format("x2 = {0}", (-b - Math.Sqrt(d)) / (2 * a));
                else
                    result += string.Format("x2 = ({0})/({1})", (-b - Math.Sqrt(d)), a * 2);
            }
 
            return result;
        }
 
        //проверяет коэффициенты на соответствие требованиям.
        private float input(string name, string msg)
        {
            Console.WriteLine(msg);
            string temp = Console.ReadLine();
            const string regexp = @"[0-9]*([\.,]?[0-9]*)?";
            const string regexp2 = @"0*([\.,]?0*)?";
            while ((name != "c" && (regCheck(temp, regexp2) || !regCheck(temp, regexp))) ||
            (name == "c" && !regCheck(temp, regexp)))
            {
                Console.WriteLine("Ошибка!\nЗначение {0} введено неверно!\n" +
                                  "Введите верное число, или q для выхода:", name);
                if (temp == "q")
                    Environment.Exit(0);
                temp = Console.ReadLine();
            }
            return Convert.ToSingle(temp, new CultureInfo("en-US"));
        }
 
        //Костыль на регулярки.длина совпадения будет не равна длине переданной строки, вернет фалс
        private bool regCheck(string str, string regexp)
        {
            Match m = Regex.Match(str, regexp);
            if (m.Length != str.Length)
                return false;
            else
                return true;
        }
    }
}
Затем добавляем проект тестов и вписываем туда примерно такой код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ConsoleApplication3;
 
namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void GetOnlyResylt()
        {
            equation eq = new equation(2f, 3f, 1f);
 
            var test = eq.calculate();
 
            Assert.AreEqual(test, "x1 = (-2)/(4)x2 = -1");
        }
    }
}
Как добавить проект модульных тестов на примере встроенной плюшки VS 2012 смотрите во вложении.
Вложения
Тип файла: zip добавление тестов.zip (838.6 Кб, 75 просмотров)
2
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
11.10.2013, 10:28  [ТС]
freeba, это я так понял для 1к, а не подскажете какую строчку изменить для вывода 2к?
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
11.10.2013, 18:35
Нужно изменить набор параметров и добавить еще один Assert.

PS: Попробуйте все таки почитать что нибудь из выше приведенной литературы. Вопросов будет много меньше.
1
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
13.10.2013, 08:41  [ТС]
freeba, Спасибо за помощь. осталось последнее. Как сделать тест на a=0, т.к. это квадратное уравнение то a не должно равняться нулю. В программе это реализовано, но как сделать именно в тесте?

Добавлено через 1 час 1 минуту
+интересует как реализовать округление до сотых в данных тестах.
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
13.10.2013, 15:54
Цитата Сообщение от Xendler Посмотреть сообщение
интересует как реализовать округление до сотых в данных тестах.
поиск?
Цитата Сообщение от Xendler Посмотреть сообщение
Как сделать тест на a=0, т.к. это квадратное уравнение то a не должно равняться нулю
Добавляем в calculate строчку:
C#
1
if (a == 0) throw new InvalidOperationException("Уравнение не является квадратным");
И собственно тест:
C#
1
2
3
4
5
6
7
8
9
 [TestMethod]
        [ExpectedException(typeof(InvalidOperationException))]
        public void ArgZero()
        {
            equation eq = new equation(0f, 3f, 1f);
 
            var test = eq.calculate();
 
        }
1
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
15.10.2013, 08:09  [ТС]
И еще раз попрошу у вас помощи (надеюсь еще не надоел ). Необходимо сделать тест на ввод символа, вместо переменных. Ну и соответственно, раз это уравнение, то никаких символов не должно быть вместо переменных (кроме x в самом уравнении)
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
15.10.2013, 08:38
Зачем??? Модульное тестирование не предназначено для обработки пользовательского ввода.
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 54
15.10.2013, 11:19  [ТС]
freeba, ну вот такой вот у нас "волшебный" преподаватель. Сделать "Модульный тест на ввод чисел" и паримся как можем., при этом ничего нам не объясняет что и почему

Добавлено через 1 час 50 минут
разобрался благодаря регулярным выражениям
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2013, 11:19
Помогаю со студенческими работами здесь

Программа для тестов - как грамотно подойти к редактированию тестов
Что я пишу: Вот пишу приложение для создания тестов, dll с классами самих тестов и приложение, которое будет уже отображать эти тесты,...

NUnit
Есть ли аналоги NUnit для Python'а?

Использование NUnit
Здравствуйте. Пробую протестировать soap-сервис. Нужно использовать NUnit. К сожалению в с# не силен, поэтому заранее извиняюсь. Без NUnit...

NUnit тест
Добрый вечер. Получил задание написать программу и к ней тесты(через NUnit).Программа должна производить подсчет числа вхождений указанной...

Nunit тесты
Доброго времени суток. Помогите разобраться с Nunit тестами. Прохожу курс на Ulearn и появилась острая необходимость в запуске этих самых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru