【发布时间】:2018-09-20 07:07:43
【问题描述】:
我是 python 单元测试的新手。我学习并进行了示例单元测试,其中方法接受输入并返回输出。
但是对于下面提到的代码,我有一些问题。
- 如何在 unittest 中模拟 init 方法的 configparser?路径 /config/program.cfg 位于生产服务器上,并且在 dev 目录中不存在。 program.cfg 文件存在于代码目录中的其他位置。有没有办法在单元测试中处理它?
- 如何在 unittest 中发送或跳过硬编码路径之类的内容,例如/var/log/info_server.log
-
如果可能的话,你能告诉我你将如何使用 pytest 模块为下面的代码编写 unittest 吗?这将有助于理解流程,我可以使用其余代码来做到这一点。
def __init__(self): self.setup_logger() # Read config parameters config = configparser.ConfigParser() config.read("/config/program.cfg") self.host_ip = config.get('default','HostIP') self.redis_ip = config.get('default','RedisIP') self.redis_port = config.get('default','RedisPort') self.info_port = config.get('default','InfoPort') self.sqlite_db_file = config.get('default','SQLiteDbFile') self.connect_redis() def setup_logger(self): #Initialize logger self.logger = logging.getLogger(__name__) self.logger.setLevel(logging.INFO) # Create a file handler handler = logging.FileHandler('/var/log/info_server.log') handler.setLevel(logging.INFO) # Create a logging format formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # Add the handlers to the logger self.logger.addHandler(handler) def connect_redis(self): # Start up a Redis instance self.logger.info("Start Redis instance") self.ad_info = redis.StrictRedis(host=self.redis_ip, port=self.redis_port, db=0) if self.ad_info is None: self.logger.error("Failed to start Redis instance") else: self.logger.info("Started Redis instance")
【问题讨论】:
-
不要一次问多个问题;一个人知道三个问题的答案的可能性要小于一个。您可以模拟内置的
open函数,如果/config/program.cfg正在打开,该函数将返回带有配置文件内容的StringIO,或者在打开/var/log/info_server.log进行写入时写入StringIO。
标签: python unit-testing pytest