Python: Mocking a context manager

前端 未结 3 647
广开言路
广开言路 2020-11-30 01:30

I don\'t understand why I can\'t mock NamedTemporaryFile.name in this example:

from mock import Mock, patch
import unittest
import tempfile

def myfunc():
           


        
3条回答
  •  广开言路
    2020-11-30 02:12

    Extending Peter K's answer using pytest and the mocker fixture.

    def myfunc():
        with tempfile.NamedTemporaryFile(prefix='fileprefix') as fh:
            return fh.name
    
    
    def test_myfunc(mocker):
        mocker.patch('tempfile.NamedTemporaryFile').return_value.__enter__.return_value.name = 'tempfilename'
        assert myfunc() == 'tempfilename'
    

提交回复
热议问题