코드를 패치하지 않습니다
def test_get_network_info(self):
with open(dirname(abspath(__file__)) + '/files/fake_network_info.txt', 'r') as mock_network_info:
with patch('subprocess.check_output', Mock(return_value=mock_network_info.read())):
self.assertEqual('192.168.1.100', get_network_info()[0])
self.assertEqual('255.255.255.0', get_network_info()[1])
self.assertEqual('192.168.1.0', get_network_info()[2])
오류
======================================================================
ERROR: test_get_network_info (tests.test_tools.ToolsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/tim/Documents/overseer/app/tests/test_tools.py", line 21, in test_get_network_info
with patch('subprocess.check_output', Mock(return_value=mock_network_info.read())):
File "/usr/local/lib/python2.7/dist-packages/mock.py", line 1268, in __enter__
original, local = self.get_original()
File "/usr/local/lib/python2.7/dist-packages/mock.py", line 1242, in get_original
"%s does not have the attribute %r" % (target, name)
AttributeError: <module 'subprocess' from '/usr/local/lib/python2.7/dist-packages/twill/other_packages/subprocess.pyc'> does not have the attribute 'check_output'
이해가 무엇
문제의 나의 이해는 mock
가 twill을 조롱하려고하는 것입니다 'subprocess
파이썬 대신 모듈.파이썬 mock.patch 정확한 수입
질문
오전 내가 뭔가 잘못하고?
어떻게하면 파이썬
subprocess
모듈을 패치 할 것인지, 능 직물을 패치하지 않을 것인지 지정할 수 있습니까? (테스트 스위트에서 일찍 가져올 수 있음) **subprocess
모듈을 패치하는 다른 방법이 있습니까?
with patch('tools.subprocess.check_output', ...
을 시도하려고 무엇.이
가 작동하지 않습니다
- 내가 피곤 장식을 사용 ... 중 하나
- i를
subprocess
모듈에 직접 패치 피곤subprocess.check_output = Mock(...
작품 만입니다 패치 적용을 취소하지 않기 때문에 좋지 않습니다. 능직의 서브 프로세스 모듈은 가져 오지있어 않기 때문에
일부 더 많은 정보
을 난 그냥이 테스트를 실행하는 경우와 다른 테스트, 그것은 작동합니다. 그러나 능 직물을 사용하여 테스트를 실행하는 즉시 위의 테스트는 실패합니다.Here은 이전 버전의 python에서 붙여 넣은 것처럼 보이는 능동태의 능직 버전입니다. 어떤
check_output
함수도 없으므로 테스트가 실패하는 것입니다.능 직물의 패키지는 광범위하게 사용하는 Flask-Testing 플러그인에서 제공됩니다. github here에 문제를 제출했습니다.
누군가가 멋진 파이썬 커뮤니티에서 도움이되기를 바랍니다.:)
- i를
능 직물의 출처를 확인한 다음 horror : sys.path.append (확장자) 및 기타 유사한 엉망. 실제로 경로를 변경하는 것이 기능의 일부인 경우를 제외하고는 모듈이 경로를 만져서는 안됩니다. 필자는 저자가 올바르게 처리하고 경로를 패치하는 방법을 찾지 못했고 이제는 충돌로 인해 문제가 발생하지 않는다고 생각합니다 (하위 프로세스를 제대로 사용할 수 없으며 모의 관련 문제가 아닙니다). 내가 github에서 본 것처럼 능 직물에서 멀리 이동하려고하면 5 년 이후로 업데이트되지 않았습니다. – vincent