对mock的进一步理解

 get_judgedoc_shinfo_time_node_api.side_effect = self.__side_effect_judgedoc_shinfo('2009-12-11')

   def __side_effect_judgedoc_shinfo(self, verify_open_from): 1)
        time_map_judgedoc_shinfo = self.__get_time_map_judgedoc_shinfo() 2def inner_effect(*arg): 4)
            start_time = arg[1] 5self.assertEqual(verify_open_from, start_time) 6)
            to_time = arg[2] 7return time_map_judgedoc_shinfo[to_time] 8return inner_effect 3)
  执行顺序:1)——7),根据return特性,一旦return,就直接跳出程序;因此,进一步理解,return inner_effect的时候,其实也将get_judgedoc_shinfo_time_node_api.side_effect中的get_judgedoc_shinfo_time_node_api 参数*arg传给了inner_effect,因此,定义inner_effect的时候,还可以这样定义inner_effect(*arg),

@staticmethod
    def __get_time_map_judgedoc_shinfo():
        """
        裁判文书
        """
        return {
            '2013-02-12': {
                "data": {
                    "reasonCount": [
                        {
                            "Count": 1
                        }
                    ]
                }
            },
            '2014-02-12': {
                "data": {
                    "reasonCount": [
                        {
                            "Count": 2
                        }
                    ]
                }
            },
            '2015-02-12': {
                "data": {
                    "reasonCount": [
                        {
                            "Count": 1
                        },
                        {
                            "Count": 2
                        },
                        {
                            "Count": 3
                        }
                    ]
                }
            }
        }
 疑问1:*arg中的参数是何时传进去的,难道是 get_judgedoc_shinfo_time_node_api.side_effect = self.__side_effect_judgedoc_shinfo('2009-12-11')通过右边的式子传进去的??
 还是通过 time_map_judgedoc_shinfo = self.__get_time_map_judgedoc_shinfo()传进去的;
 疑问2return time_map_judgedoc_shinfo[to_time]中的to_time是跟 def __get_time_map_judgedoc_shinfo(): return...中的时间保持一致的吧?那这么说*arg中的参数是通过def __get_time_map_judgedoc_shinfo():确定的咯??
 解:*arg是根据com_data解析得到的,返回的左区间与右区间两个时间值,然后根据切割点数,进行切割,有三个时间点,因此以2015-2-12号为起点向后数到2013-2-12,时间注意其规律,因此好几个api返回的时间节点都是这样的:2015-2-122014-2-122013-2-12;

下面assert函数进行最后的测试验证:
    def __assert_normal(self, feature_tme_svc, first_time, second_time, last_time):
        """
        常规检查
        """
        # -- when
        res = feature_tme_svc.get_time_features(company_name=u'北京龙盛源小额贷款有限公司', node_num=3)
        #这一步,会走所用mock后的api,

        # -- then
        assert res.time_map_features[last_time]
        k = res.time_map_features[last_time]
        print(type(k))
        self.t_u.print_domain(res)
        self.assertEqual(3, len(res.time_map_features.keys()))
        self.assertEqual(2, res.time_map_features[last_time].address_change_cnt)
        self.assertEqual(6, res.time_map_features[last_time].established_years)
        self.assertEqual(0, res.time_map_features[last_time].fr_change_cnt)
        self.assertEqual(3, res.time_map_features[last_time].regcap_change_cnt)
        self.assertEqual(6, res.time_map_features[first_time].bidding_cnt)
        self.assertEqual(9, res.time_map_features[second_time].bidding_cnt)
        self.assertEqual(11, res.time_map_features[last_time].bidding_cnt)
        self.assertEqual(6, res.time_map_features[last_time].judgedoc_cnt)
        self.assertEqual(4, res.time_map_features[last_time].trade_mark_cnt)

下一个学习方面:如何在Python中使用static、classabstract方法(权威指南)
[如何在Python中使用static、classabstract方法(权威指南)](http://python.jobbole.com/81595/)

猜你喜欢

转载自blog.csdn.net/sinat_26566137/article/details/80186948