Python 单元测试:跨文件的字典初始化不起作用
Python Unit Testing: Dictionary initialization across files not working
我正在为我的 python 项目之一构建数据存储系统。为此,我正在构建和测试类型验证。
数据应该在存储前用 data_storage_type_validation
进行类型检查所以我制作了一个字典 validator_storage
其中包含一个 class StorageValidator
其中包含关于给定的所有信息数据。
一切正常,但是当我使用单元测试测试 data_storage_type_validation
函数时,setUpClass
函数中的字典初始化不起作用。好像/data_managment里的字典validator_storage
和/test_datamanagement里导入的字典(用from data_managment import validator_storage
)不一样。
我很感激每一个想法。
编辑
我想我的问题是为什么 validator_storage["value0"].type
return int(它应该)在 TestDataStorageTypeValidation
和 bool 在 data_storage_type_validation
我的代码
StorageValidator
class(/StorageValidator):
class StorageValidator:
def __init__(self, t: type):
self.type = t
data_storage_type_validation
函数(/data_management):
def data_storage_type_validation(data_label: str, data) -> bool:
if type(data_label) in [str]:
if data_label in validator_storage:
print("Data ",data)
print("Data type", type(data))
print("datalable ", data_label)
print("expected", validator_storage[data_label].type)
print()
if type(data) in [validator_storage[data_label].type]:
return True
else:
return False
else:
raise LabelNotFound
else:
raise TypeError
测试TestDataStorageTypeValidation
(/test_data_management):
class TestDataStorageTypeValidation(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
value_int_validator = StorageValidator
value_int_validator.__init__(value_int_validator, t=int)
print("Int:", value_int_validator.type)
validator_storage["value0"] = value_int_validator
print("Int:", validator_storage["value0"].type)
value_float_validator = StorageValidator
value_float_validator.__init__(value_float_validator ,t=float)
validator_storage["value3.14"] = value_float_validator
value_complex_validator = StorageValidator
value_complex_validator.__init__(value_complex_validator, t=complex)
validator_storage["value5j"] = value_complex_validator
value_string_validator = StorageValidator
value_string_validator.__init__(value_string_validator, t=str)
validator_storage["valuestring"] = value_string_validator
value_list_validator = StorageValidator
value_list_validator.__init__(value_list_validator, t=list)
validator_storage["value[]"] = value_list_validator
value_dict_validator = StorageValidator
value_dict_validator.__init__(value_dict_validator, t=dict)
validator_storage["value{}"] = value_dict_validator
value_bool_validator = StorageValidator
value_bool_validator.__init__(value_bool_validator, t=bool)
validator_storage["valueTrue"] = value_bool_validator
def test_data_storage_type_validation_success_data_valid(self):
#return_int = data_storage_type_validation("value0", 1)
#self.assertEqual(return_int, True)
return_float = data_storage_type_validation("value3.14", 3.14)
print("Return:",return_float)
self.assertEqual(return_float, True)
return_complex = data_storage_type_validation("value5j", 5j)
self.assertEqual(return_complex, True)
return_string = data_storage_type_validation("valuestring", "string")
self.assertEqual(return_string, True)
return_list = data_storage_type_validation("value[]", [])
self.assertEqual(return_list, True)
return_dict = data_storage_type_validation("value{}", {})
self.assertEqual(return_dict, True)
return_bool = data_storage_type_validation("valueTrue", True)
self.assertEqual(return_bool, True)
def test_data_storage_type_validation_success_data_not_valid(self):
return_int = data_storage_type_validation("value0", "false_type")
self.assertEqual(return_int, False)
return_float = data_storage_type_validation("value3.14", "false_type")
self.assertEqual(return_float, False)
return_complex = data_storage_type_validation("value5j", "false_type")
self.assertEqual(return_complex, False)
return_string = data_storage_type_validation("valuestring", [])
self.assertEqual(return_string, False)
return_list = data_storage_type_validation("value[]", "false_type")
self.assertEqual(return_list, False)
return_dict = data_storage_type_validation("value{}", "false_type")
self.assertEqual(return_dict, False)
return_bool = data_storage_type_validation("valueTrue", "false_type")
self.assertEqual(return_bool, False)
def test_data_storage_type_validation_label(self):
self.assertRaises(LabelNotFound, data_storage_type_validation, "test_label", 1)
def test_data_storage_type_validation_type(self):
self.assertRaises(TypeError, data_storage_type_validation, 5, "test")
self.assertRaises(TypeError, data_storage_type_validation, 3.1415, "test")
self.assertRaises(TypeError, data_storage_type_validation, 5j, "test")
self.assertRaises(TypeError, data_storage_type_validation, [], "test")
self.assertRaises(TypeError, data_storage_type_validation, {}, "test")
self.assertRaises(TypeError, data_storage_type_validation, True, "test")
最后我自己回答了这个问题。
原因是错误的 class 实例化:
我输入了:
something = some_class
something.__init__()
而不是:
something = some_class()
所以每个实例都引用相同的值。
很抱歉浪费你的时间这是一个非常愚蠢的错误,但当你不断地在语言之间切换时会发生这种情况。
我正在为我的 python 项目之一构建数据存储系统。为此,我正在构建和测试类型验证。
数据应该在存储前用 data_storage_type_validation
进行类型检查所以我制作了一个字典 validator_storage
其中包含一个 class StorageValidator
其中包含关于给定的所有信息数据。
一切正常,但是当我使用单元测试测试 data_storage_type_validation
函数时,setUpClass
函数中的字典初始化不起作用。好像/data_managment里的字典validator_storage
和/test_datamanagement里导入的字典(用from data_managment import validator_storage
)不一样。
我很感激每一个想法。
编辑
我想我的问题是为什么 validator_storage["value0"].type
return int(它应该)在 TestDataStorageTypeValidation
和 bool 在 data_storage_type_validation
我的代码
StorageValidator
class(/StorageValidator):
class StorageValidator:
def __init__(self, t: type):
self.type = t
data_storage_type_validation
函数(/data_management):
def data_storage_type_validation(data_label: str, data) -> bool:
if type(data_label) in [str]:
if data_label in validator_storage:
print("Data ",data)
print("Data type", type(data))
print("datalable ", data_label)
print("expected", validator_storage[data_label].type)
print()
if type(data) in [validator_storage[data_label].type]:
return True
else:
return False
else:
raise LabelNotFound
else:
raise TypeError
测试TestDataStorageTypeValidation
(/test_data_management):
class TestDataStorageTypeValidation(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
value_int_validator = StorageValidator
value_int_validator.__init__(value_int_validator, t=int)
print("Int:", value_int_validator.type)
validator_storage["value0"] = value_int_validator
print("Int:", validator_storage["value0"].type)
value_float_validator = StorageValidator
value_float_validator.__init__(value_float_validator ,t=float)
validator_storage["value3.14"] = value_float_validator
value_complex_validator = StorageValidator
value_complex_validator.__init__(value_complex_validator, t=complex)
validator_storage["value5j"] = value_complex_validator
value_string_validator = StorageValidator
value_string_validator.__init__(value_string_validator, t=str)
validator_storage["valuestring"] = value_string_validator
value_list_validator = StorageValidator
value_list_validator.__init__(value_list_validator, t=list)
validator_storage["value[]"] = value_list_validator
value_dict_validator = StorageValidator
value_dict_validator.__init__(value_dict_validator, t=dict)
validator_storage["value{}"] = value_dict_validator
value_bool_validator = StorageValidator
value_bool_validator.__init__(value_bool_validator, t=bool)
validator_storage["valueTrue"] = value_bool_validator
def test_data_storage_type_validation_success_data_valid(self):
#return_int = data_storage_type_validation("value0", 1)
#self.assertEqual(return_int, True)
return_float = data_storage_type_validation("value3.14", 3.14)
print("Return:",return_float)
self.assertEqual(return_float, True)
return_complex = data_storage_type_validation("value5j", 5j)
self.assertEqual(return_complex, True)
return_string = data_storage_type_validation("valuestring", "string")
self.assertEqual(return_string, True)
return_list = data_storage_type_validation("value[]", [])
self.assertEqual(return_list, True)
return_dict = data_storage_type_validation("value{}", {})
self.assertEqual(return_dict, True)
return_bool = data_storage_type_validation("valueTrue", True)
self.assertEqual(return_bool, True)
def test_data_storage_type_validation_success_data_not_valid(self):
return_int = data_storage_type_validation("value0", "false_type")
self.assertEqual(return_int, False)
return_float = data_storage_type_validation("value3.14", "false_type")
self.assertEqual(return_float, False)
return_complex = data_storage_type_validation("value5j", "false_type")
self.assertEqual(return_complex, False)
return_string = data_storage_type_validation("valuestring", [])
self.assertEqual(return_string, False)
return_list = data_storage_type_validation("value[]", "false_type")
self.assertEqual(return_list, False)
return_dict = data_storage_type_validation("value{}", "false_type")
self.assertEqual(return_dict, False)
return_bool = data_storage_type_validation("valueTrue", "false_type")
self.assertEqual(return_bool, False)
def test_data_storage_type_validation_label(self):
self.assertRaises(LabelNotFound, data_storage_type_validation, "test_label", 1)
def test_data_storage_type_validation_type(self):
self.assertRaises(TypeError, data_storage_type_validation, 5, "test")
self.assertRaises(TypeError, data_storage_type_validation, 3.1415, "test")
self.assertRaises(TypeError, data_storage_type_validation, 5j, "test")
self.assertRaises(TypeError, data_storage_type_validation, [], "test")
self.assertRaises(TypeError, data_storage_type_validation, {}, "test")
self.assertRaises(TypeError, data_storage_type_validation, True, "test")
最后我自己回答了这个问题。 原因是错误的 class 实例化:
我输入了:
something = some_class
something.__init__()
而不是:
something = some_class()
所以每个实例都引用相同的值。
很抱歉浪费你的时间这是一个非常愚蠢的错误,但当你不断地在语言之间切换时会发生这种情况。