跟着廖雪峰的教程,学习到单元测试这一块的时候,写了两个代码,
1,mydict.py
class Dict(dict):
def __init__(self, **kw):
super().__init__(**kw)
def __getattr__(self, key):
try:
return self[key]
except KeyError:
raise AttributeError(r"'Dict' object has no attribute '%s'" % key)
def __setattr__(self, key, value):
self[key] = value
2,mydict_test.py
import unittest
from mydict import Dict
import sys
sys.path.append(r"E:\soft\pycharm\workplace\liaoxuefeng_learning\Exception\mydict.py")#说是把目录加进去就可以导入成功,没有任何变化,
class TestDict(unittest.TestCase):
def test_init(self):
d = Dict(a=1, b='test')
self.assertEqual(d.a, 1)
self.assertEqual(d.b, 'test')
self.assertTrue(isinstance(d, dict))
def test_key(self):
d = Dict()
d['key'] = 'value'
self.assertEqual(d.key, 'value')
def test_attr(self):
d = Dict()
d.key = 'value'
self.assertTrue('key' in d)
self.assertEqual(d['key'], 'value')
def test_keyerror(self):
d = Dict()
with self.assertRaises(KeyError):
value = d['empty']
def test_attrerror(self):
d = Dict()
with self.assertRaises(AttributeError):
value = d.empty
两个文件都放在同一个目录下,但是始终提示找不到,
ModuleNotFoundError: No module named 'mydict'
最终解决方法,是这样,修改如上导入语句,添加了一个“.”
from .mydict import Dict
import unittest
from .mydict import Dict
# import sys
# sys.path.append(r"E:\soft\pycharm\workplace\liaoxuefeng_learning\Exception\mydict.py")
class TestDict(unittest.TestCase):
def test_init(self):
d = Dict(a=1, b='test')
self.assertEqual(d.a, 1)
self.assertEqual(d.b, 'test')
self.assertTrue(isinstance(d, dict))
def test_key(self):
d = Dict()
d['key'] = 'value'
self.assertEqual(d.key, 'value')
def test_attr(self):
d = Dict()
d.key = 'value'
self.assertTrue('key' in d)
self.assertEqual(d['key'], 'value')
def test_keyerror(self):
d = Dict()
with self.assertRaises(KeyError):
value = d['empty']
def test_attrerror(self):
d = Dict()
with self.assertRaises(AttributeError):
value = d.empty
完整代码如上
ception/mydict_test.py:TestDict in E:\soft\pycharm\workplace\liaoxuefeng_learning
.....
----------------------------------------------------------------------
Ran 5 tests in 0.003s
OK
Process finished with exit code 0