"argparse kısmı" biraz belirsiz olduğundan, bu cevap bir kısma odaklanır: parse_argsyöntem. Komut satırınızla etkileşime giren ve iletilen tüm değerleri alan yöntemdir. Temel olarak, ne parse_argsdö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.mock3.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. NamespaceTestlerinizde tam argparse güvenmemesi için kendini alay etmeyi seçerseniz, bunun gerçek Namespacesı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())