mock 示例

复制代码
import sys,os
# workdir=os.getcwd()
# root_path=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# print ("root_path",root_path)
# sys.path.append(root_path)

from unittest.mock import Mock
from ..index_manage.screenIndex import IndexManage
from pandas import DataFrame
import pandas as pd
import psycopg2
import psycopg2.extras

class FengClass(object):
    wfids = '0cb03afdc42e443e947506146edc80be,1004'  # feng
    stime = '2020-04-19'
    etime = '2020-04-24'
    cols = ""

class GuangClass(object):
    wfids = '57bacf6dc8b54b7e963385ec0598f6lp,1005'  # guang
    stime = '2020-04-19'
    etime = '2020-04-24'
    cols = ""

class GuangErrorClass(object):
    wfids = '57bacf6dc8b54b7e963385ec0598f6lp,1005'  # guang
    stime = '2020-04-19'
    etime = '2020-04-24'
    cols = "sdf"

class noWfidClass(object):
    wfids = ''  # guang
    stime = '2020-04-19'
    etime = '2020-04-24'
    cols = ""

class myCurs(object):
    def __enter__(self):

        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        pass

    def execute(self,sql):
        pass
    def fetchall(self):
        t = [11] * 96
        t.insert(0, '2020-01-01')
        return [t]
    def fetchone(self):
        return "3eee6536043e44ecbadb525a6e072e95"

class AccessDB(object):
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        pass

    def close(self):
        pass
    def cursor(self):
        return myCurs()

class Test_tool():
    def setup_method(self): # 一开始用的setup_class,结果一个用例的mock影响了下个用例,因为这些用例共用了一个self.tstobj。现在改成setup_method后,每个用例执行前都重置self.tstobj的值

        self.tstobj = IndexManage()

    def test_invalid_col(self):
        psycopg2.connect = Mock(return_value=None)
        self.tstobj.write_db = Mock(return_value=None)
        self.tstobj.get_neibs = Mock(return_value=['3eee6536043e44ecbadb525a6e072e95'])
        data_x = DataFrame({'x': [1, 2, 3, 4]}, index = pd.date_range('2020-02-04', periods=4, freq="15T"))
        data_y = DataFrame({'y': [2, 2, 4, 4]}, index = pd.date_range('2020-02-04', periods=4, freq="15T"))
        self.tstobj.get_value = Mock(side_effect=lambda _, x, *d: data_x if 'x' == x else data_y)
        ret = self.tstobj.corr(GuangErrorClass, None)
        assert "" == ret.ret


    def test_execute_batch_error(self):
        psycopg2.connect = Mock(return_value=AccessDB())
        self.tstobj.get_neibs = Mock(return_value=['3eee6536043e44ecbadb525a6e072e95'])
        data_x = DataFrame({'x': [1, 2, 3, 4]}, index=pd.date_range('2020-02-04', periods=4, freq="15T"))
        data_y = DataFrame({'y': [2, 2, 4, 4]}, index=pd.date_range('2020-02-04', periods=4, freq="15T"))
        self.tstobj.get_value = Mock(side_effect=lambda _, x, *d: data_x if 'x' == x else data_y)
        ret = self.tstobj.corr(GuangClass, None)
        assert "" == ret.ret


    def test_get_value(self):
        psycopg2.connect = Mock(return_value=AccessDB())
        psycopg2.extras.execute_batch = Mock(return_value = None)
        ret = self.tstobj.corr(GuangClass, None)
        assert "" == ret.ret

    def test_get_value_xnone(self):
        psycopg2.connect = Mock(return_value=None)
        self.tstobj.write_db = Mock(return_value=None)
        self.tstobj.get_neibs = Mock(return_value = ['3eee6536043e44ecbadb525a6e072e95'])
        data_x = DataFrame()
        data_y = DataFrame({'y': [2, 2, 4, 4]}, index=pd.date_range('2020-02-04', periods=4, freq="15T"))
        self.tstobj.get_value = Mock(side_effect=lambda _, x, *d: data_x if 'x' == x else data_y)  # Mock(side_effect=lambda x: 0 if x<20 else 30)
        ret = self.tstobj.corr(FengClass, None)
        assert "" == ret.ret

    def test_get_value_ynone(self):
        psycopg2.connect = Mock(return_value=None)
        self.tstobj.write_db = Mock(return_value=None)
        self.tstobj.get_neibs = Mock(return_value = ['3eee6536043e44ecbadb525a6e072e95'])
        data_x = DataFrame({'x': [1, 2, 3, 4]}, index=pd.date_range('2020-02-04', periods=4, freq="15T"))
        data_y = DataFrame()
        self.tstobj.get_value = Mock(side_effect=lambda _, x, *d: data_x if 'x' == x else data_y)  # Mock(side_effect=lambda x: 0 if x<20 else 30)
        ret = self.tstobj.corr(FengClass, None)
        assert "" == ret.ret


    def test_noWfidClass(self):
        psycopg2.connect = Mock(return_value=AccessDB())
        psycopg2.extras.execute_batch = Mock(return_value=None)
        ret = self.tstobj.corr(noWfidClass, None)

        assert 'unexpect type' in ret.ret



    def test_feng_no_neibs(self):
        psycopg2.connect = Mock(return_value=None)
        self.tstobj.write_db = Mock(return_value=None)
        self.tstobj.get_neibs = Mock(return_value = None)
        ret = self.tstobj.corr(FengClass, None)
        assert "no neighbor" in ret.ret

    def test_feng(self):
        psycopg2.connect = Mock(return_value=None)
        self.tstobj.write_db = Mock(return_value=None)
        self.tstobj.get_neibs = Mock(return_value = ['3eee6536043e44ecbadb525a6e072e95'])
        data_x = DataFrame({'x': [1, 2, 3, 4]}, index=pd.date_range('2020-02-04', periods=4, freq="15T"))
        data_y = DataFrame({'y': [2, 2, 4, 4]}, index=pd.date_range('2020-02-04', periods=4, freq="15T"))
        self.tstobj.get_value = Mock(side_effect=lambda _, x, *d: data_x if 'x' == x else data_y)  # Mock(side_effect=lambda x: 0 if x<20 else 30)
        ret = self.tstobj.corr(FengClass, None)
        assert "" == ret.ret

    def test_guang(self):
        psycopg2.connect = Mock(return_value=None)
        self.tstobj.write_db = Mock(return_value=None)
        self.tstobj.get_neibs = Mock(return_value=['3eee6536043e44ecbadb525a6e072e95'])
        data_x = DataFrame({'x': [1, 2, 3, 4]}, index = pd.date_range('2020-02-04', periods=4, freq="15T"))
        data_y = DataFrame({'y': [2, 2, 4, 4]}, index = pd.date_range('2020-02-04', periods=4, freq="15T"))
        self.tstobj.get_value = Mock(side_effect=lambda _, x, *d: data_x if 'x' == x else data_y)
        ret = self.tstobj.corr(GuangClass, None)
        assert "" == ret.ret
复制代码

 

posted on   我和你并没有不同  阅读(391)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示