Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ТиМП Лабораторная работа 4

.pdf
Скачиваний:
0
Добавлен:
08.08.2026
Размер:
747 Кб
Скачать

Рисунок 1.11 – Тестирование функции ответа на звонок

Рисунок 1.12 – Тестирование функции завершения звонка

Результат модульного тестирования представлен на рисунке 1.13.

Рисунок 1.13 – Результат тестирования

Листинг программы, использованной для проведения тестов, представлен в приложении А. Листинг модульных тестов представлен в приложении Б.

11

Заключение

Входе выполнения лабораторной работы было проведено тестирование

всоответствии с вариантом №6, а также выполнены все обязательные задания.

12

Приложение А

(обязательное) Программа по варианту

using System.Text.RegularExpressions;

class Phone

{

public string Number { get; set; } public decimal Balance { get; set; } public PhoneState State { get; set; }

public Phone(string number, string balance)

{

this.SetPhoneNumber(number);

this.SetBalance(balance); this.State = new WaitingState();

}

public void SetPhoneNumber(string number)

{

string pattern = @"^(\+7 |8 )?\d{3} \d{3} \d{2} \d{2}$"; try

{

if (number == null)

{

throw new ArgumentNullException();

}

else if (!Regex.IsMatch(number, pattern))

{

throw new FormatException();

}

}

catch (ArgumentNullException)

{

Console.WriteLine($"Введите номер телефона"); return;

}

catch (FormatException)

{

Console.WriteLine("Неверный формат номера телефона.\n" +

"Пример: +7 000 000 00 00 или 8 000 000 00 00"); return;

}

13

catch

{

Console.WriteLine("Неизвестная ошибка"); return;

}

this.Number = number;

}

public void SetBalance(string balance)

{

string pattern = @"^\d+\,\d{2}$"; try

{

if (Regex.IsMatch(balance, pattern))

{

decimal sum = decimal.Parse(balance); if (sum <= 0)

{

throw new ArgumentOutOfRangeException();

}

}

else

{

throw new FormatException();

}

}

catch (OverflowException)

{

Console.WriteLine("Слишком большое число.\n" +

"Пример: 100,99"); return;

}

catch (ArgumentNullException)

{

Console.WriteLine("Сумма баланса должна быть не пустым значением.\n" +

"Пример: 100,99"); return;

}

catch (FormatException)

{

Console.WriteLine("Неверный формат баланса. После точки только 2

цифры\n" +

"Пример: 100,99");

return;

14

}

catch (ArgumentOutOfRangeException)

{

Console.WriteLine("Баланс пополняется только на неотрицательную сумму"); return;

}

catch

{

Console.WriteLine("Неизвестная ошибка"); return;

}

this.Balance = decimal.Parse(balance);

}

public string GetBalance()

{

return $"Ваш баланс: {this.Balance}";

}

public string GetNumber()

{

return $"Ваш номер телефона: {this.Number}";

}

public void Call()

{

this.State.Call(this);

}

public void ReceiveCall()

{

this.State.ReceiveCall(this);

}

public void Answer()

{

this.State.Answer(this);

}

public void EndCall()

{

this.State.EndCall(this);

}

public void TopUpBalance(string deposit)

{

string pattern = @"^\d+\,\d{2}$"; try

{

if (!Regex.IsMatch(deposit, pattern))

15

{

throw new FormatException();

}

decimal sum = decimal.Parse(deposit); if (sum <= 0)

{

throw new ArgumentOutOfRangeException();

}

}

catch (ArgumentNullException)

{

Console.WriteLine("Сумма для пополнения должна быть не пустым значением\n" +

"Пример: 100,99"); return;

}

catch (FormatException)

{

Console.WriteLine("Сумма пополнения имеет неверный формат\n" + "Пример: 100,99");

return;

}

catch (StackOverflowException)

{

Console.WriteLine("Слишком большое число, пополните баланс на меньшую

сумму");

return;

}

catch (ArgumentOutOfRangeException)

{

Console.WriteLine("Сумма пополнения должна являться числом большим

нуля");

return;

}

catch

{

Console.WriteLine("Неизвестня ошибка"); return;

}

try

{

decimal sum = decimal.Parse(deposit) + this.Balance;

}

16

catch

{

Console.WriteLine("Слишком большое число, пополните баланс на меньшую

сумму");

return;

}

this.Balance += decimal.Parse(deposit);

}

}

interface PhoneState

{

public void Call(Phone phone) { } public void ReceiveCall(Phone phone) { } public void Answer(Phone phone) { } public void EndCall(Phone phone) { }

}

class WaitingState : PhoneState

{

public void Call(Phone phone)

{

if (phone.Balance < decimal.Parse("2,5"))

{

Console.WriteLine($"Недостаточно средств, на счете {phone.Balance}"); return;

}

Console.WriteLine($"Исходящий звонок с {phone.Number}"); phone.Balance -= decimal.Parse("2,5");

phone.State = new InCallState();

}

public void ReceiveCall(Phone phone)

{

Console.WriteLine($"Входящий звонок на {phone.Number}"); phone.State = new IncomingCallState();

}

public void Answer(Phone phone)

{

Console.WriteLine($"Нет входящего звонка на {phone.Number}");

}

public void EndCall(Phone phone)

{

Console.WriteLine($"Нет активного звонка для {phone.Number}");

}

17

}

class IncomingCallState : PhoneState

{

public void Call(Phone phone)

{

Console.WriteLine($"Нельзя совершить зваонок - уже есть вызов");

}

public void ReceiveCall(Phone phone)

{

Console.WriteLine($"Уже получаете вызов");

}

public void Answer(Phone phone)

{

Console.WriteLine($"Ответели на звонок. Разговор начат");

}

public void EndCall(Phone phone)

{

Console.WriteLine($"Вызов отклонен");

}

}

class InCallState : PhoneState

{

public void Call(Phone phone)

{

Console.WriteLine($"Уже в разговоре");

}

public void ReceiveCall(Phone phone)

{

Console.WriteLine($"Нельзя принять второй звонок во время разговора");

}

public void Answer(Phone phone)

{

Console.WriteLine($"Уже в разговоре");

}

public void EndCall(Phone phone)

{

Console.WriteLine($"Разговор завершен");

}

}

18

Приложение Б

(обязательное) Модульные тесты

using System.Text;

namespace laba4test

{

[TestClass]

public class PhoneTest

{

private StringBuilder _consoleOutput; private StringWriter _stringWriter;

Phone testPhone = new Phone("8 999 999 99 99", "100,00");

//Для чтения строк выводимых в консоль

[TestInitialize]

public void ConsoleReader()

{

_consoleOutput = new StringBuilder(); _stringWriter = new StringWriter(_consoleOutput); Console.SetOut(_stringWriter);

}

//Проверка пополнения баланса

[TestMethod]

public void TopUpBalance_199_10199returned_Test()

{

testPhone.TopUpBalance("1,99");

string expectedBalance = "Ваш баланс: 101,99"; string actualBalance = testPhone.GetBalance();

Assert.AreEqual(expectedBalance, actualBalance);

}

//Проверка функции "позвонить" [TestMethod]

public void InCallTest()

{

string expectedCallState = "Исходящий звонок с 8 999 999 99 99"; testPhone.Call();

Assert.AreEqual(expectedCallState, _consoleOutput.ToString().Trim());

}

//Проверка функции "входящий звонок" [TestMethod]

public void ReceiveCallTest()

{

string expectedCallState = "Входящий звонок на 8 999 999 99 99"; testPhone.ReceiveCall();

Assert.AreEqual(expectedCallState, _consoleOutput.ToString().Trim());

}

//Проверка функции "ответить на звонок" [TestMethod]

public void AnswerCallTest()

19

{

string expectedCallState = "Ответели на звонок. Разговор начат"; testPhone.ReceiveCall(); _stringWriter.GetStringBuilder().Clear();

testPhone.Answer();

Assert.AreEqual(expectedCallState, _consoleOutput.ToString().Trim());

}

//Проверка функции "завершить звонок" [TestMethod]

public void EndCallTest()

{

string expectedCallState = "Разговор завершен"; testPhone.Call(); _stringWriter.GetStringBuilder().Clear(); testPhone.EndCall();

Assert.AreEqual(expectedCallState, _consoleOutput.ToString().Trim());

}

}

}

20