模拟未覆盖Python中函数的返回

问题描述 投票:0回答:1

我正在对我的项目的某一类实施单元测试。我要测试的方法是queryCfsNoteVariations

class PdfRaportDaoImpl:
        def queryCfsNoteVariations(self, reportId):
        sql = """
select v.* from item_value_table v
where v.table_id in
(select table_id from table_table t
    where t.report_id=%s and table_name='CFS')
"""
        cfsItemList = dbFind(sql, (reportId))

        sql = "select * from variations_cfs_note"
        cfsNoteVariations = dbFind(sql)
        if cfsNoteVariations == None or len(cfsNoteVariations) == 0:
            raise Exception("cfs note variations is null!")

        cfsNoteVariationList = []
        for itemInfo in cfsItemList:
            for cfsNoteVariation in cfsNoteVariations:
                if (
                        cfsNoteVariation["item_name_cfs"].lower()
                        == itemInfo["item_name"].lower()
                ):
                    cfsNoteVariationList.append(cfsNoteVariation["item_name_cfs_note"])
            if len(cfsNoteVariationList) > 0:
                return cfsNoteVariationList, itemInfo["item_note"]
        return None, None

具有路径:/com/pdfgather/PDFReportDao.py

在我的测试中,我正在/com/pdfgather/GlobalHelper.py中的dbFind()方法上做补丁。我当前的测试如下:

from com.pdfgather.PDFReportDao import PdfReportDaoImpl


@patch("com.pdfgather.GlobalHelper.dbFind")
    def test_query_cfs_note_variations(self, mock_find):
        mock_find.side_effect = iter([
[{"item_name" : "foo"}, {"item_name" : "hey"}], 
        [{"item_name_cfs": "foo"},
         {"item_name_cfs": "foo"},
         {"item_name_cfs": "hey"}]]
])
        report_id = 3578
        result = TestingDao.dao.queryCfsNoteVariations(report_id)

        # Printing result
        print(result)

但是我没有得到想要的结果,它进入循环并从循环内部返回。而是dbFind不返回任何内容(但不应该返回,因为我已经为dbFind预先分配了返回值)。

提前感谢!

python python-unittest python-unittest.mock
1个回答
0
投票

Python将com.pdfgather.PDFReportDao.dbFindcom.pdfgather.GlobalHelper.dbFind称为两个不同的类。第二个是要修补的导入。尝试将补丁更改为:

@patch("com.pdfgather.PDFReportDao.dbFind")
© www.soinside.com 2019 - 2024. All rights reserved.