2017-02-23 57 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 ''