Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 12, 2022 10:55:26

Arifureta
Зарегистрирован: 2022-04-12
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Реализация теста с использованием self.assertEqual

Добрый день!
Есть программа для работы с файлами (Чтение из файла, запись в файл, удаление строк и т.д):

 import sys
import os
import re
 
## Чтение данных с файла (полностью)
def read_file_full():
    file = open("fileswot.txt")
    print(file.read() + "\n")
    file.close()
    menu()
 
 
## Чтение данных с файла (по - строчно)
def read_file_line():
    file = open("fileswot.txt")
    print(file.readline())
    file.close()
    menu()
 
 
## Перезаписать данные в файл
def record_file():
    file = open('fileswot.txt', 'w')
    try:
        stroka = input('Введите строку для записи в файл: ')
        file.write(stroka + "\n")
    finally:
        file.close()
        menu()
 
 
## Очистка файла
def clearing_file():
    file = open('fileswot.txt', 'r')
    os.system(r'nul>fileswot.txt')
    file.close()
    menu()
 
 
## Дописать данные в файл
def record_fileplus():
    file = open('fileswot.txt', 'a')
    try:
        stroka = input('Введите строку для записи в файл: ')
        file.write(stroka + "\n")
    finally:
        file.close()
        menu(aut)
 
 
## Поиск значений
def search_file():
    file = open("fileswot.txt", "r")
    data = file.read()
    pl = data.count("+")
    mi = data.count("-")
    if pl > mi:
        return ("Use a breakthrough strategy or a transition strategy № 1")
        menu(aut)
    elif pl < mi:
        return ("Use transition strategy № 2 or survival strategy")
        menu(aut)
    else:
        return ("Error - Equal number of values")
        menu(aut)
 
 
## Удаление строки в файле
def delstr_file():
    n = int(input("Введите номер строки для удаления: "))
    with open(r"fileswot.txt", "r") as file:
        lines = file.readlines()
    del lines[n]
    with open(r"fileswot.txt", "w") as file:
        file.writelines(lines)
    menu(aut)
 
 
## Создание меню на удаление
def menu_del(aut):
    print("1. Безвозвратно удалить данные")
    print("2. Вернутся в меню")
    H = (input("Выберите действие: "))
    if H == aut[2]:
        clearing_file()
    elif H == aut[3]:
        menu(aut)
    else:
        return ("Error - The selected parameter is not in the menu")
        menu_del(aut)
 
 
## Создание меню на чтение
def menu_read(aut):
    print("1. Прочитать информацию полностью")
    print("2. Прочитать информацию по - строчно")
    B = (input("Выберите действие: "))
    if B == aut[2]:
        read_file_full()
    elif B == aut[3]:
        read_file_line()
    else:
        return ("Error - The selected parameter is not in the menu")
        menu_read(aut)
 
 
## Создание меню на выход
def menu_exit(aut):
    print("1. Выйти")
    print("2. Вернутся в меню")
    J = (input("Выберите действие: "))
    if J == aut[2]:
        sys.exit(0)
    elif J == aut[3]:
        menu(aut)
    else:
        return ("Error - The selected parameter is not in the menu")
        menu_exit(aut)
 
 
## Создание меню
def menu(aut):
    print("1. Прочитать информацию с файла")
    print("2. Записать информацию в файл")
    print("3. Дописать информацию в файл")
    print("4. Очистить данные файла")
    print("5. Удалить строку в файле")
    print("6. Выполнить поиск по значениям")
    print("7. Выход из программы")
    A = (input("Выберите действие: "))
    if A == aut[2]:
        menu_read(aut)
    elif A == aut[3]:
        record_file()
    elif A == aut[4]:
        record_fileplus()
    elif A == aut[5]:
        menu_del()
    elif A == aut[6]:
        delstr_file()
    elif A == aut[7]:
        search_file()
    elif A == aut[8]:
        menu_exit()
 
    else:
        return ("Error - The selected parameter is not in the menu")
        menu(aut)
 
def autoriz(aut):
    Login = aut[0]
    Password = aut[1]
    a = input("Enter your username: ")
    if a != Login:
        return ("Error - Invalid login was entered")
    else:
        return ("The login was entered correctly")
        b = input("Enter your password: ")
        if b != Password:
            return ("Error - Invalid password was entered")
        else:
            return ("Select the desired action:")
            menu(aut)
 
## Авторизация пользователя
def main():
    aut = ['Admin', 'Qwerty', '1', '2', '3', '4', '5', '6', '7']
    Login = aut[0]
    Password = aut[1]
    a = input("Enter your username: ")
    if a != Login:
        return ("Error - Invalid login was entered")
    else:
        print("The login was entered correctly")
        b = input("Enter your password: ")
        if b != Password:
            return ("Error - Invalid password was entered")
        else:
            return ("Select the desired action:")
            menu(aut)
 
if __name__=='__main__':
    main()
Так же вторая программа создана для реализации тестов с использованием unittest, но при использовании self.assertEqual выдается ошибка, что тестов 0.
Вот код данного теста:
 import unittest
from unittest import TestCase, main
from KP import read_file_full, read_file_line, record_file, clearing_file, record_fileplus, search_file, delstr_file, menu_del, menu_read, menu_exit, autoriz
 
class KP_Test(TestCase):
    def authorization (self):
        aut = ['Admin']
        self.assertEqual(autoriz(aut), "The login was entered correctly")
 
 
 
if __name__ == '__main__':
    main()
Подскажите пожалуйста в чем ошибка?

Прикреплённый файлы:
attachment Error.jpg (22,4 KБ)

Офлайн

#2 Апрель 12, 2022 13:28:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Реализация теста с использованием self.assertEqual

Arifureta
Так же вторая программа создана для реализации тестов с использованием unittest, но при использовании self.assertEqual выдается ошибка, что тестов 0.
Куча ошибок у тебя. Ты не пробовал сначала почитать что-нибудь по тестам, прежде чем наугад пытаться что-то сделать?

Во-первых, все методы тестирующего класса должны начинаться с префикса test_ , так как они и являются тестами. Просто методы тестами не являются, это просто методы там вспомогательные всякие. Это ты бы увидел, если бы что-то читал про тесты, на первых же строчках.

Во-вторых, у тебя внутри тестируемой функции используется ввод из stdin. Соответственно, тебе надо замокать stdin и делать такой псевдоввод, якобы ты это вводишь, в то время как вводить это будет сам тест. Чтобы это замокать, надо пропатчить sys.stdin, чтобы функция input(), которая обращается к sys.stdin , обратилась к твоему моку и получила “введённую” строку.

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



Отредактировано py.user.next (Апрель 12, 2022 13:29:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version