如何测试在具有nosetests的函数中调用函数

msv*_*kon 10 python testing unit-testing nosetests

我正在尝试为项目设置一些自动单元测试.我有一些功能,作为副作用偶尔会调用另一个功能.我想写一个单元测试,测试第二个函数被调用,但我很难过.下面是伪代码示例:

def a(self):
    data = self.get()
    if len(data) > 3500:
        self.b()

    # Bunch of other magic, which is easy to test.

def b(self):
    serial.write("\x00\x01\x02")
Run Code Online (Sandbox Code Playgroud)

我该如何测试b()-gets调用?

ale*_*cxe 11

您可以b使用模拟模块模拟该函数并检查它是否被调用.这是一个例子:

import unittest
from mock import patch


def a(n):
    if n > 10:
        b()

def b():
    print "test"


class MyTestCase(unittest.TestCase):
    @patch('__main__.b')
    def test_b_called(self, mock):
        a(11)
        self.assertTrue(mock.called)

    @patch('__main__.b')
    def test_b_not_called(self, mock):
        a(10)
        self.assertFalse(mock.called)

if __name__ == "__main__":
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

另见:

希望有所帮助.

  • 实际上,如果`b`正在向串口写入内容,我会说你必须*在单元测试中嘲笑它. (3认同)