LINUX.ORG.RU

python argparse unittest


0

1

помогите на примере написать простенький тест

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import argparse


class DemoClass():
    def __init__(self, Debug):
        if Debug:
            print("init...")
    def some_fn(self, a, b):
        return a - b

def create_parser():
    parser = argparse.ArgumentParser()
    parser.add_argument("--verbose", "-v", action="store_true",
        help="set loglevel verbose")
    parser.add_argument("--someargs", "-s", nargs="*", action="append", help="Return A - B")

    args = parser.parse_args()
    debug = False

    if args.verbose:
        print("Debug...")
        debug = True


    if args.someargs is not None:
        a = int(args.someargs[0][0])
        b = int(args.someargs[0][1])
        if debug:
            print(a, b)
        dc = DemoClass(debug)
        print("OK, ...", dc.some_fn(a, b))


if __name__ == "__main__":
    create_parser()

★★★★

from unittest import TestCase

from bla_bla_bla import DemoClass

class SampleTestCase(TestCase):
    def test_some_fn(self):
        dc = DemoClass()
        self.assertEqual(2, dc.some_fn(5, 3))
        
proext
()
Ответ на: комментарий от deity

Я бы вообще написал как-минимум так:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import argparse


class DemoClass():
    def __init__(self, debug):
        self.debug = debug
        if debug:
            print("init...")

    def some_fn(self, *args):
        if args:
            a = int(args[0][0])
            b = int(args[0][1])

            if self.debug:
                print(a, b)

            return a - b


def create_parser():
    parser = argparse.ArgumentParser()
    parser.add_argument("--verbose", "-v", action="store_true",
                        help="set loglevel verbose")
    parser.add_argument("--someargs", "-s", nargs="*", action="append", help="Return A - B")

    args = parser.parse_args()

    if args.verbose:
        print("Debug...")

        dc = DemoClass(debug=True)
        print("OK, ...", dc.some_fn(*args.someargs))


if __name__ == "__main__":
    create_parser()

И потом уже спокойно бы тестил метод some_fn с коль-угодно разным набором параметров

proext
()
Ответ на: комментарий от deity

В Вашем случае Вы тестируете не параметры, передаваемые скрипту, а логику работы с параметрами.

Так что же Вы все-таки хотите протестировать в

if args.someargs is not None: 
    a = int(args.someargs[0][0]) 
    b = int(args.someargs[0][1])
?

Умеет ли Python-интерпретатор работать с параметрами? Может, 100%.

proext
()
Ответ на: комментарий от proext

Так что же Вы все-таки хотите протестировать

Количество передаваемых параметров или их отсутствие. Так идея ясна.

deity ★★★★
() автор топика
Ответ на: комментарий от deity

А какова цель тестировать кол-во передаваемых параметров? Уж извините, никак не могу понять, зачем Вам по-сути тестировать argparse?

Как я это вижу (словами) исходя из Ваших комментариев:

Тест1: запустить скрипт с 2-мя параметрами и убедиться, что параметра 2.

Тест2: запустить скрипт без параметров и убедиться, что параметры не переданы.

Вы это хотите?

proext
()
Ответ на: комментарий от proext

Вы это хотите?

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

deity ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.