Chapter 6 mock object
6.1
6.1
mock对象也可以是真实对象在调试期的替代品。TimMackinnon[MFC01]给出下面的这个列表:真实对象具有不可确定的行文(产生不可预测的结果,如股票行情)真实对象很难被创建真实对象的行为很难被触发(如网络错误)真实对象令程序的运行速度很慢真实对象有(或者是)用户界面测试需要询问真实对象它如何被调用的(eg:测试可能需要询问某个回调函数是否被调用了)真实对象实际并不真实存在(当需要和其他开发小组,或者新的硬件系统打交道的时候,这是一个普遍的问题)借助于mock对象我们可以解决上面提到的所有问题。在使用mock对象进行测试的时候有3个关键步骤:1.使用接口来描述一个对象2.为产品代码实现这个接口3.以测试为目的,在mock对象中实这个接口因为对测试代码只会通过接口来引用对象,所以它可以不知道它引用的究竟是真实对象还是mock对象【popexizhi:P67-69之间是使用system.time的一个例子使用java的,自己翻译为python 2.6版本 源码如下:(对原文删减了After 5 o'clock 判断 playing a whistle 部分,自己这次的重点是对python的结构实现测试,go了一下mock结果python有三方工具,有兴趣的可以去研究一下:) )】
- """
- Check_envir.py
- """
- import envir
- class Checker:
- def __init__(self,anEnv):
- self.env=anEnv
- def reminder(self):
- return self.env.getTime()
- """
- envir.py
- """
- class Environmental:
- """def envir """
- def getTime(self):
- print "hi"
- """
- envir_mock.py
- """
- import envir
- class MockSystemEnvironment(envir.Environmental):
- """ mock use """
- def getTime(self):
- return self.current_time
- def setTime(self,aTime):
- self.current_time=str(aTime)
- """
- envir_sys.py
- """
- import time
- import envir
- class SystemEnvironment(envir.Environmental):
- """ system time """
- def getTime(self):
- return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
- """
- testCheck_envir.py
- """
- import Check_envir
- import envir_mock
- import unittest
- class testCheck_envir(unittest.TestCase):
- def testreminder(self):
- env=envir_mock.MockSystemEnvironment()
- env.setTime("2011-07-03 15:33:20")
- x=Check_envir.Checker(env)
- print x.reminder()
- if __name__=="__main__":
- unittest.main()
- """
- tureuse_envir.py
- """
- import Check_envir
- import envir_sys
- import time
- class QuittingTime:
- def __init__(self):
- self.env=envir_sys.SystemEnvironment()
- print self.env.getTime()
- def CheckTime(self):
- x=Check_envir.Checker(self.env)
- print x.reminder()
- if __name__ == "__main__":
- a=QuittingTime()
- time.sleep(1)
- a.CheckTime()
没有评论:
发表评论