2017-02-23 73 views
1

你如何使用mock unitest来模拟filedialog.askopenfilename()或filedialog.saveasfilename()?在Python 2.x的以下链接中回答了同样的问题。 Unittest Tkinter File DialogUnittest Tkinter文件对话框为Python 3.5

该解决方案不适用于我正在使用的Python 3.5。

我试过MagicMock和单元测试补丁,没有任何工作。请参阅下面的代码。

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) 

在method1中,它调用askopenfilename。我想让askopenfilename返回“”。

我将不胜感激任何帮助。

回答

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 ''