"argparse kısmı" biraz belirsiz olduğundan, bu cevap bir kısma odaklanır: parse_args
yöntem. Komut satırınızla etkileşime giren ve iletilen tüm değerleri alan yöntemdir. Temel olarak, ne parse_args
döndürdüğünü alay edebilirsiniz, böylece komut satırından değerleri alması gerekmez. mock
Paket piton sürümleri 2,6-3,2 için pip yoluyla kurulabilir. unittest.mock
3.3 sürümünden itibaren standart kütüphanenin bir parçasıdır .
import argparse
try:
from unittest import mock # python 3.3+
except ImportError:
import mock # python 2.6-3.2
@mock.patch('argparse.ArgumentParser.parse_args',
return_value=argparse.Namespace(kwarg1=value, kwarg2=value))
def test_command(mock_args):
pass
Tüm komut yönteminizin argümanlarını Namespace
aktarılmasalar bile dahil etmelisiniz . Bu bağımsız değişkenlere bir değer verin None
. ( belgelere bakın ) Bu stil, her yöntem bağımsız değişkeni için farklı değerlerin iletildiği durumlar için hızlı bir şekilde test yapmak için kullanışlıdır. Namespace
Testlerinizde tam argparse güvenmemesi için kendini alay etmeyi seçerseniz, bunun gerçek Namespace
sınıfa benzer şekilde davrandığından emin olun .
Aşağıda, argparse kitaplığındaki ilk snippet'i kullanan bir örnek verilmiştir.
# test_mock_argparse.py
import argparse
try:
from unittest import mock # python 3.3+
except ImportError:
import mock # python 2.6-3.2
def main():
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args) # NOTE: this is how you would check what the kwargs are if you're unsure
return args.accumulate(args.integers)
@mock.patch('argparse.ArgumentParser.parse_args',
return_value=argparse.Namespace(accumulate=sum, integers=[1,2,3]))
def test_command(mock_args):
res = main()
assert res == 6, "1 + 2 + 3 = 6"
if __name__ == "__main__":
print(main())