比起写好所有的程序后整体调试,单元测试显示了它的优势,比如在深度学习的代码中,比较重要的两大块是:数据集模块、网络结构模块。pytorch中,写好数据集模块时,会测试‘__getitem__
功能,这个时候可以用到unittest
和IPython
。
以下时今天写的要给关于眼底的数据集测试:
import sys
import unittest
# 如果没有此条,会出错
#
sys.path.append("D:/4I/retina-images/Mycode")
from config import cfg
from data.transforms import build_transforms
from data.build import build_dataset
from data import make_data_loader
"""
测试数据集
"""
class TestDataSet(unittest.TestCase):
def test_dataset(self):
train_transform = build_transforms(cfg, True)
train_set = build_dataset(cfg, train_transform, True)
from IPython import embed
embed()
if __name__ == "__main__":
unittest.main()
unittest介绍
需要什么学什么!!!这个很重要!!所以,这里不是系统的介绍unittest,只是带一笔
了解4个概念就可以用la
- 编写单元测试时,需要编写一个测试类,这个测试类继承于
unittest.TestCase
- 类中的测试方法必须以
test
开头,不以test
开头的方法,测试时候不会执行。 - 如何运行单元测试??
- 直接在命令行中运行
python -m unittest mydict_test
, 推荐使用这种方法。 -
- 程序末尾添加,以下代码,然后运行脚本代码即可
- 直接在命令行中运行
if __name__ == "__main___":
unittest.main()
- 单元测试中两个特殊的方法,
setUp(), tearDown()
,在执行test_
方法前,先执行setUp()
,执行test_
之后,执行tearDown()
方法。(这个试一下就很好理解)
IPyhon中的embed
前面代码中的embed()
,程序执行到embed()
时就会进入Ipython交互界面,此时可以在命令行中,查看程序中的变量,Ctrl+D
退出交互界面,程序继续执行,所以这种方法相当管用。其他关于IPyhon知识,以后遇到在说吧!!
调试
关于调试的其他的方法,还有logging
,pdb
,或者时IDE中间的端点,下个星期会 总结一下logging、pdb,方法有好几种,每种功能性其实差不多,最主要的熟悉一种自己喜欢的。
2019/7/9日
每日遇到的问题都记录啦,一个星期、或者两个星期汇总一次