Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 24.02.2018
Сообщений: 5
1

Написать unit-тест для кода

26.02.2018, 09:10. Показов 1131. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Помогите написать unit-тест для данного метода.
В C# новичок.

C#
1
2
3
4
5
6
7
8
9
10
11
public Movie SearchMovie(DateTime date, string name)
{
    // поиск сеанса с заданной датой и названием
    foreach (Movie m in movies)
        if (m.datetime.Date == date && m.name == name)
            return m;
        else
            continue;
 
    return null;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2018, 09:10
Ответы с готовыми решениями:

Unit-тест на код
Помогите сделать unit тест на данный код не знаю как сделать... На этот код: public void...

Не работает тест ASP.NET Unit
Изучаю тестирование: Это ASP.NET using System; using System.Collections.Generic; using...

Написать unit тест с заглушками на любой из методов
Помогите пожалуйста написать unit тест с заглушками на любой из методов. Буду признателен ...

Unit тест для метода
имеется следующий метод public int Summ(string s) { return s.Split(new {','},...

6
Эксперт .NET
1696 / 1325 / 316
Регистрация: 15.06.2012
Сообщений: 5,045
Записей в блоге: 3
26.02.2018, 19:21 2
ужс...

что такое movies? Где находится этот метод?
0
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,079
27.02.2018, 09:42 3
bolver9, linq использовать нельзя, для поиска в коллекции? Если можно, то ваш метод - велосипед.
0
Эксперт .NET
1696 / 1325 / 316
Регистрация: 15.06.2012
Сообщений: 5,045
Записей в блоге: 3
27.02.2018, 13:09 4
на всякий, автору -- чтобы написать тест, нужно видеть ВЕСТЬ class, в котором находится данный метод, т.к. нужно знать что и как мокать (ставить заглушки).
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
15.03.2018, 22:53 5
Попробую распутать это сложное дело. Поиграем в детективов.

movies - это массив или список, что не особо важно. Пусть это будет список. В этом списке хранятся экземпляры класса Movie. В классе Movie есть два поля или свойства: datetime и name. Пусть это будут поля, что тоже не особо важно.

Есть некий класс, где находится метод SearchMovie и поле movies. Назовём этот класса - Helper. Имя пока неважно. Можно в любой момент переименовать.

Helper.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
 
namespace Movies
{
    public class Helper
    {
        public List<Movie> movies = new List<Movie>();
 
        public Movie SearchMovie(DateTime date, string name)
        {
            // поиск сеанса с заданной датой и названием
            foreach (Movie m in movies)
                if (m.datetime.Date == date && m.name == name)
                    return m;
                else
                    continue;
 
            return null;
        }
    }
}
Задача метода SearchMovie принять дату выхода фильма и имя фильма. Проверить, есть ли в списке movies фильм с указанной датой выхода и указанным именем. Если такой фильм в списке есть, то возвращается объект класса Movie, в противном случае возвращается null.

Создадим решение под названием Movies и проект Movies в этом решении. Так же добавим проект типа "Test" с именем Movies_Tests. Будем использовать встроенный Microsoft.VisualStudio.TestTools.UnitTesting.

Первый тест сделаем таким, что movies будет равно null, а SearchMovie должен вернуть в этом случае тоже null

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Movies;
 
namespace Movies_Tests
{
    [TestClass]
    public class HelperTests
    {
        [TestMethod]
        public void ShouldReturnNullForMoviesEqualNull()
        {
            Helper helper = new Helper();
            helper.movies = null;
 
            DateTime data = new DateTime(2001, 11, 4);
            string name = "Harry Potter and the Philosopher's Stone";
            Movie actual = helper.SearchMovie(data, name);
            Assert.AreEqual(null, actual);
        }
    }
}
Данный тест проваливается, потому что в методе SearchMovie мы пытаемся пройти по списку, значение которого равно null:

Написать unit-тест для кода
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
15.03.2018, 22:59 6
Сделаем так, чтобы данный тест не проваливался. Для этого нужно в метод SearchMovie добавить проверку списка movies на null, если список movies равен null, то возвращаем null, чего и ожидает тест выше:

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
using System;
using System.Collections.Generic;
 
namespace Movies
{
    public class Helper
    {
        public List<Movie> movies = new List<Movie>();
 
        public Movie SearchMovie(DateTime date, string name)
        {
            if (movies == null) return null;
 
            // поиск сеанса с заданной датой и названием
            foreach (Movie m in movies)
                if (m.datetime.Date == date && m.name == name)
                    return m;
                else
                    continue;
 
            return null;
        }
    }
}
Теперь тест выше проходит успешно:

Написать unit-тест для кода
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
16.03.2018, 00:18 7
Добавил ещё один тест, который проверяет, что в случае поиска элемента, которого в списке нет, то SearchMovie должен вернуть null. Этот тест успешно выполняется:

Название: Movies_CSharp_003.png
Просмотров: 30

Размер: 10.4 Кб

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
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Movies;
using System.Collections.Generic;
 
namespace Movies_Tests
{
    [TestClass]
    public class HelperTests
    {
        private Helper helper;
 
        [TestInitialize]
        public void Initialize()
        {
            helper = new Helper();
        }
 
        [TestMethod]
        public void ShouldReturnNullForMoviesEqualNull()
        {
            helper.movies = null;
 
            DateTime data = new DateTime(2001, 11, 4);
            string name = "Harry Potter and the Philosopher's Stone";
            Movie actual = helper.SearchMovie(data, name);
            Assert.AreEqual(null, actual);
        }
 
        [TestMethod]
        public void ShouldReturnNullIfWeDoNotHaveThisFilm()
        {
            List<Movie> movies = new List<Movie>();
            Movie movie = new Movie();
            movie.datetime = new DateTime(2001, 11, 4);
            movie.name = "Harry Potter and the Philosopher's Stone";
            movies.Add(movie);
            helper.movies = movies;
 
            DateTime data = new DateTime(1939, 12, 15);
            string name = "Gone with the Wind";
            Movie actual = helper.SearchMovie(data, name);
            Assert.AreEqual(null, actual);
        }
    }
}
0
16.03.2018, 00:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2018, 00:18
Помогаю со студенческими работами здесь

Unit-тест для void метода
Возник вопрос, как написать юнит тест для void метода, не принимающего ничего. using System;...

Unit-тест для проверки текста в файле
Как сделать unit-тест для проверки метода, который создает текстовый файл и пишет в него что-то?...

Не запускается unit тест из-за ошибки компиляции
не могу запустить свой тест из-за ошибки

Пожалуйста объясните как работает тест unit
Как работает данный тест. Объясните. using System; using...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru