san*_*dra 3 python unit-testing mocking
我是 python 单元测试框架的新手,在模拟依赖方面有很多困惑。
我正在尝试为类的以下成员函数((check_something())编写单元测试:
class Validations:
def check_something(self):
abc = os.environ['PLATFORM']
xyz = Node()
no_of_nodes = len(xyz.some_type_var)
if abc != "X_PLATFORM" or no_of_nodes != 1:
raise someException()
Run Code Online (Sandbox Code Playgroud)
我们如何消除依赖?
Node()吗?abc分配了X_PLATFORM?如何给1变量赋值no_of_nodes?这反过来又是从Node()对象派生的。
class Node(object):
def __init__(self):
self.nodes = DEF()
self.some_type_var = someclass().getType()
self.localnode = os.environ['HOSTNAME']
self.peertype = self.get_peer_type()
def get_peer_type(self):
return node
Run Code Online (Sandbox Code Playgroud)我试着在单元测试下面写。我无法检查失败和通过条件。我不确定它是否正确。
class TestValidation(unittest.TestCase):
@mock.patch.object(Node, "get_peer_type")
@mock.patch('somefile.Node', spec=True)
def test_1(self, mock_object1, mock_object2):
os.environ['PLATFORM'] = 'X_PLATFORM'
obj = Validations()
self.assertRaises(someException, obj.check_something)
Run Code Online (Sandbox Code Playgroud)
验证类使用Node()Class 对象,Node 类使用其他类。
是的,您可以模拟被测代码单元之外的任何内容。这里的意思是os.environ字典和Node()类。
补丁需要应用到你的代码所在的模块;@mock.patch('somefile.Node', spec=True)如果somefile与模块相同,则正确Validations;有关原因,请参阅修补位置部分。
我不确定使用spec=True在这里是否有帮助;您的Node属性都是在 中创建的实例属性Node.__init__,因此它们在类上不可用,这就是规范的内容。参见节autospeccing如何克服,如果你真的想设置一个规范。
abc设置 from os.environ,您可以使用该patch.dict()对象根据需要修补该字典。
在xyz = len(xyz.some_type_var)简单地通过任一上述设定处理some_type_var属性与正确的长度到一个对象,或者通过设定xyz.some_type_var.__len__.return_value,因为它是xyz.some_type_var.__len__()被调用的方法len()的功能。
所以,为了测试,你会做:
class TestValidation(unittest.TestCase):
@mock.patch('somefile.Node')
def test_1(self, mock_node):
# set up the Node() instance, with the correct length
node_instance = mock_node.return_value
node_instance.some_type_var.__len__ = 2
# or, alternatively, node_instance.some_type_var = (1, 2)
# set up os.environ['PLATFORM']
with mock.patch.dict('os.environ', PLATFORM='X_PLATFORM'):
obj = Validations()
with self.assertRaises(someException):
obj.check_something()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4727 次 |
| 最近记录: |