2017-10-04 87 views
0

我試圖做到的是嘲笑一個分裂的方法中這樣模擬一個字符串的屬性

def method_separator(s): 
    try: 
     a, b, c = s.split('-') 
     print a, b, c 
    except: ValueError: 
     print "An error occurred or so" 

在測試

with self.assertRaises(ValueError): 
    with mock.patch(What to put here?) as mock_patch: 
    mock_patch.return_value = "TEXT" # To raise ValueError 
    this = method_separator('Some-good-text') # The mock should not let this good test to pass 

我所做的模擬與string.split工作

def method_separator(s): 
    try: 
     a, b, c = split.string(s, '-') 
     print a, b, c 
    except: ValueError: 
     print "An error occurred or so" 

with self.assertRaises(ValueError): 
    with mock.patch('string.split') as mock_patch: 
    mock_patch.return_value = "TEXT" # To raise ValueError 
    this = method_separator('Some-good-text') # The mock should not let this good test to pass 

即使作品,問題依然存在,它是可以做的嗎?模擬的結果「」.split(' - ')

+1

你爲什麼需要*模擬*那個?!只需傳入一個字符串,將其拆分爲適當的值。 – jonrsharpe

+0

那個方法只有一個片段,想法是嘲弄那個特定的部分,這就是爲什麼我把它放在一個方法來看看如何。在字符串來自我不能操作的方法的主要方法。 – miphos

+1

然後你模擬這些方法,返回一個合適的字符串。沒有一個實際的代表性例子,很難提出進一步的建議。 – jonrsharpe

回答

0

要分割的字符串被傳遞到您的方法中。您不需要使用patch,只需將Mock傳入該方法即可。

# Production Code 
def method_separator(s): 
try: 
    a, b, c = s.split('-') 
    print a, b, c 
except: ValueError: 
    print "An error occurred or so" 

# Test Code 
from unittest.mock import Mock 

with self.assertRaises(ValueError): 
    mock_string = Mock(spec=string) 
    mock_string.side_effect = ValueError("Some message") 
    this = method_separator(mock_string) 

patch當你想通過import語句您的生產獲得模擬是非常有用的。如果您直接將值傳遞給您的生產代碼,則必須製作自己的Mock對象。

相關問題