2017-10-04 50 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对象。

相关问题