Python unittest - 设置警告:ResourceWarning
Python unittest - setUp warning: ResourceWarning
我正在准备我的测试,在 运行 这个脚本之后我收到一个警告:
class TestForm(unittest.TestCase):
def setUp(self):
with open('test_json.json') as f:
self.hd = json.load(f)
self.reader = csv.reader(open('test.csv'))
self.result = {}
for row in self.reader:
key = row[0]
self.result[key] = row[1:]
def test_1(self):
self.form = self.hd[0]['Customer'][0]['Information'][0]['Form']
self.exp = self.result['Form1'][0]
self.assertEqual(self.form, self.exp)
def test_2(self):
self.form = self.hd[1]['Customer'][0]['Information'][0]['Form']
self.exp = self.result['Form2'][0]
self.assertEqual(self.form, self.exp)
错误:
.C:\Program Files\Python.5.1\lib\unittest\suite.py:107: ResourceWarning: unclosed file <_io.TextIOWrapper name='test.csv' mode='r' encoding='cp1250'>
for index, test in enumerate(self):
脚本已完成,但这个错误很奇怪。我观察到它只发生在这部分在 setUp
函数中时:
with open('test_json.json') as f:
self.hd = json.load(f)
self.reader = csv.reader(open('test.csv'))
self.result = {}
for row in self.reader:
key = row[0]
self.result[key] = row[1:]
当我在 TestForm
之外使用它时,脚本中没有警告。我应该把它移回 class TestForm
之外,还是放在不同的文件中?
此代码打开一个 CSV 文件并使其永远打开:
self.reader = csv.reader(open('test.csv'))
这是 "correct" 的方法:
with open('test.csv') as csv_file:
self.reader = csv.reader(csv_file)
# use the file
# the file is closed here, when the context is closed
另一种方式是开闭"manually":
csv_file = open('test.csv')
self.reader = csv.reader(csv_file)
# use the file
# when you are done, close the file:
csv_file.close()
看起来您在 setUp
之后从未使用过 self.reader
,所以这似乎是您的最佳解决方案:
def setUp(self):
with open('test.csv') as csv_file:
reader = csv.reader(csv_file)
self.result = {}
for row in reader:
key = row[0]
self.result[key] = row[1:]
# csv_file closes here; reader is not any longer available either
我正在准备我的测试,在 运行 这个脚本之后我收到一个警告:
class TestForm(unittest.TestCase):
def setUp(self):
with open('test_json.json') as f:
self.hd = json.load(f)
self.reader = csv.reader(open('test.csv'))
self.result = {}
for row in self.reader:
key = row[0]
self.result[key] = row[1:]
def test_1(self):
self.form = self.hd[0]['Customer'][0]['Information'][0]['Form']
self.exp = self.result['Form1'][0]
self.assertEqual(self.form, self.exp)
def test_2(self):
self.form = self.hd[1]['Customer'][0]['Information'][0]['Form']
self.exp = self.result['Form2'][0]
self.assertEqual(self.form, self.exp)
错误:
.C:\Program Files\Python.5.1\lib\unittest\suite.py:107: ResourceWarning: unclosed file <_io.TextIOWrapper name='test.csv' mode='r' encoding='cp1250'>
for index, test in enumerate(self):
脚本已完成,但这个错误很奇怪。我观察到它只发生在这部分在 setUp
函数中时:
with open('test_json.json') as f:
self.hd = json.load(f)
self.reader = csv.reader(open('test.csv'))
self.result = {}
for row in self.reader:
key = row[0]
self.result[key] = row[1:]
当我在 TestForm
之外使用它时,脚本中没有警告。我应该把它移回 class TestForm
之外,还是放在不同的文件中?
此代码打开一个 CSV 文件并使其永远打开:
self.reader = csv.reader(open('test.csv'))
这是 "correct" 的方法:
with open('test.csv') as csv_file:
self.reader = csv.reader(csv_file)
# use the file
# the file is closed here, when the context is closed
另一种方式是开闭"manually":
csv_file = open('test.csv')
self.reader = csv.reader(csv_file)
# use the file
# when you are done, close the file:
csv_file.close()
看起来您在 setUp
之后从未使用过 self.reader
,所以这似乎是您的最佳解决方案:
def setUp(self):
with open('test.csv') as csv_file:
reader = csv.reader(csv_file)
self.result = {}
for row in reader:
key = row[0]
self.result[key] = row[1:]
# csv_file closes here; reader is not any longer available either