'side_effect for "sys.argv" returns a tuple of 1,1 regardless of what I set it to when doing mock.patch
For some reason side_effect isn't having an effect when I try to change the first two instances of sys.argv to be anything they just default to 1,1.
"""testing"""
def check_arg():
try:
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
except IndexError:
return False, False
except ValueError:
return False, False
else:
if num1 < num2:
return num1, num2
# elif num1 == num2:
# return False, False
else:
return num2, num1
"""test"""
@mock.patch("sys.argv", side_effect=["9", "2"])
def test_check_arg(self, mocktest):
checkarg = check_arg()
self.assertEqual(checkarg, (2, 2))
"""
Problem: ... , line 23, in test_check_arg self.assertEqual(checkarg, (2, 2)) AssertionError: Tuples differ: (1, 1) != (2, 2)
First differing element 0: False 2
- (1,1)
- (2, 2)
Solution 1:[1]
It seems that side_effect is not what you need in this case. It's enough if you use:
"""testing"""
def check_arg():
try:
num1 = int(sys.argv[0])
num2 = int(sys.argv[1])
except IndexError:
return False, False
except ValueError:
return False, False
else:
if num1 < num2:
return num1, num2
# elif num1 == num2:
# return False, False
else:
return num2, num1
"""test"""
@mock.patch("sys.argv", ["9", "2"])
def test_check_arg(self):
checkarg = check_arg()
self.assertEqual(checkarg, (2, 9))
This should work fine. But reading the docs about sys.argv (https://docs.python.org/3/library/sys.html#sys.argv) sys.argv[0] always contains the name of the script so it will probably be better like:
It seems that side_effect is not what you need in this case. It's enough if you use:
"""testing"""
def check_arg():
try:
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
except IndexError:
return False, False
except ValueError:
return False, False
else:
if num1 < num2:
return num1, num2
# elif num1 == num2:
# return False, False
else:
return num2, num1
"""test"""
@mock.patch("sys.argv", ["test_argv.py", "9", "2"])
def test_check_arg(self):
checkarg = check_arg()
self.assertEqual(checkarg, (2, 9))
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
