Salutare! Acest thread e o continuare al acestuia, rezolvat nu cu mult timp in urma. Insa acum vin cu o problema la ca care n-am gasit nicio solutie dupa o cautare de cateva ore.
Din nou, am urmatoarele doua fisiere, exemplu.py si test_exemplu.py:
# exemplu.py
import argparse, sys
def parse_args(args):
parser = argparse.ArgumentParser()
parser.add_argument("-c", "--cale", type=str, metavar=" ")
parser.add_argument("-t", "--timp", type=float, metavar=" ")
return parser.parse_args(args)
def validate(data):
try:
if data.timp < 0:
raise ValueError
except ValueError:
print(f"Timpul are o valoare negativa: {data.timp}. Te rog introdu o valoare pozitiva")
sys.exit(1)
def main():
parsed_data = parse_args(sys.argv[1:])
validate(parsed_data)
print(parsed_data.cale)
print(parsed_data.timp)
if __name__ == '__main__':
main()
# test_exemplu.py
import unittest
from exemplu import parse_args, validate
class TestExemplu(unittest.TestCase):
def test_parser(self):
parser = parse_args(['-c', 'asd', '-t', '-1'])
self.assertEqual(parser.cale,'asd')
self.assertEqual(parser.timp, -1)
def test_valoare_negativa(self):
parsed_data = parse_args(['-t', '-1'])
self.assertRaises(ValueError, validate, parsed_data)
if __name__ == '__main__':
unittest.main()
Dupa cum puteti vedea, in exemplu.py, in functia validate, am customizat mesajul pentru ValueError, iar apoi am folosit sys.exit(1) pentru a inchide programul. Totul functioneaza bine la rularea lui exemplu.py, insa, cand vine vorba de rularea lui test_exemplu.py, imi aparea urmatoarea eroare pentru cel de-al doilea test (test_valoare_negativa):
test_parser (test_exemplu.TestExemplu) ... ok
test_valoare_negativa (test_exemplu.TestExemplu) ... Timpul are o valoare negativa: -1.0. Te rog introdu o valoare pozitiva
ERROR
======================================================================
ERROR: test_valoare_negativa (test_exemplu.TestExemplu)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\tester\Downloads\cli_mon_tool\exemplu.py", line 14, in validate
raise ValueError
ValueError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\tester\Downloads\cli_mon_tool\test_exemplu.py", line 14, in test_valoare_negativa
self.assertRaises(ValueError, validate, parsed_data)
File "C:\Users\tester\AppData\Local\Programs\Python\Python310\lib\unittest\case.py", line 738, in assertRaises
return context.handle('assertRaises', args, kwargs)
File "C:\Users\tester\AppData\Local\Programs\Python\Python310\lib\unittest\case.py", line 201, in handle
callable_obj(*args, **kwargs)
File "C:\Users\tester\Downloads\cli_mon_tool\exemplu.py", line 17, in validate
sys.exit(1)
SystemExit: 1
----------------------------------------------------------------------
Ran 2 tests in 0.009s
FAILED (errors=1)
Asadar, cum as putea face ca sys.exit(1) sa cheme la randul ei ValueError, cand insasi sys.exit(1) a fost chemata de catre ValueError? Sau ce alternative as avea?
Va multumesc!