2017-02-23 66 views
1

Как вы используете mock unitest для издевательства filedialog.askopenfilename() или filedialog.saveasfilename()? Тот же вопрос был дан в следующей ссылке для Python 2.x. Unittest Tkinter File DialogUnittest Tkinter File Dialog для Python 3.5

Решение не работает для Python 3.5, что я и использую.

Я попробовал как MagicMock, так и патч от unittest, и ничего не работало. См. Мой код ниже.

from tkinter.filedialog import * 
from unittest.mock import MagicMock 
from unittest.mock import patch 

# @patch(filedialog.askopenfilename) 
def test1(self): 
    try: 
     filedialog.askopenfilename = MagicMock(return_value="") 
     app = class1() 
     app.method1() 
    except ValueError as e: 
     print(e) 

@patch(filedialog.askopenfilename) 
def test2(self, mock1): 
    try: 
     # filedialog.askopenfilename = MagicMock(return_value="") 
     app = class1() 
     app.method1() #method1 has filedialog.askopenfilename in it 
    except ValueError as e: 
     print(e) 

Внутри метод1, он вызывает askopenfilename. Я хотел бы сделать askopenfilename return "".

Я очень благодарен за любую помощь.

ответ

0

Я определяю, как это сделать. Мне нужно указать имя класса до askopenfilename.

from unittest.mock import Mock 
    class1.askopenfilename = Mock(return_value='') 
    # Inside class1, method1 uses askopenfilename to open up file dialog box 
    class1.method1() # method1 will call Mock(return_value='') instead of askopenfilename and return ''