0

我试图通过模拟 sql 连接来模拟 unittest 模拟中 get_count 函数返回的值。但我得到了这个错误。

AssertionError: 12939 != <MagicMock name='mock.cursor().fetchone()。getitem ()' id='1053090478792'

应用程序.py

import pyodbc

try:

    def get_count(conn):
        cursor = conn.cursor()
        cursor.execute('SELECT COUNT(ID) FROM mydb.dbo.Company')
        count = cursor.fetchone()[0]
        return count
except pyodbc.Error as e:
    print(e)


if __name__ == '__main__':
    server = 'xx.x.xx.xxx'
    database = 'mydb' 
    username = 'user1' 
    password = '12424124'
    conn = pyodbc.connect('DRIVER={ODBC Driver 11 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
    cursor = conn.cursor()
    print(get_count(conn))

test_count.py

import unittest
from unittest import mock
from app import get_count
class Test_count(unittest.TestCase):

    def fix_dbc(self):
        dbc = mock.MagicMock(spec=['cursor'])
        return dbc

    def fix_count(self):    
        count = 12939
        return count

    def test_get_count_method(self):
        dbc = self.fix_dbc()
        count = self.fix_count()
        self.assertEqual(count, get_count(dbc))
if __name__ == '__main__':
    unittest.main(argv=['', '-v'])

这是我的代码任何人都可以帮助我

4

1 回答 1

0

你在模拟初始化中间离开了:dbc是你给的一个魔法模拟 get_count。所以你会dbc.cursor().fetchone()[0]在调用其他方法后得到dbc.cursor().

您必须配置您的模拟以返回适当的值:

def fix_dbc(self):
    dbc = mock.MagicMock(spec=['cursor'],
                         **{'cursor.return_value': mock.MagickMock(
                             spec=['execute', 'fetchone'],
                             **{'fetchone.return_value': [12939]})})
    return dbc
于 2021-03-04T11:38:41.487 回答