我目前正在做 python 课的作业,需要一些帮助。我写了以下函数:
def get_funcs(funcs: dict, file_name: str, table_name: str) -> None: ''' Read the given *.csv file, store the data inside the database and store the functions in a dict Args: functions dict: Dictionary to store the functions object file_name str: The file name of the csv-file with file extension table_name str: The name of the SQL table ''' global update_database try: if file_name == "test.csv" or file_name == "test": raise ValueError("The function for the test data is not neccessary.") elif file_name != "train.csv" and file_name != "train" and file_name != "ideal.csv" and file_name != "ideal": raise ValueError("Given a completly wrong / empty file or a directorys.") # store the complete path to the file in a variable complete_path = os.path.join(dataset_dir, file_name) # check file to be correct file_extension = os.path.splitext(file_name)[1] if file_extension == "": print_log(MessageType.Warn, "get_funcs", "Missing file extension. Added "".csv"" automatically!") complete_path += ".csv" if not os.path.exists(complete_path): raise FileNotFoundError() # read csv file and store it in a data frame data = pd.read_csv(complete_path, sep=",") print_log(MessageType.Info, "get_funcs", "Successfully read \"" + file_name + "\"!") except PermissionError as error: print_log(MessageType.Error, "get_funcs", "Cannot open the given csv file!") return except Exception as error: print_log(MessageType.Error, "get_funcs", error) return
任务的一部分是编写单元测试。所以我写了以下内容:
import main import unittest class UnitTestPythonTask(unittest.TestCase): def test_check_test_function(self): ''' Checks the file validation of the given .csv files ''' self.assertRaises(ValueError, main.get_funcs({}, "test.csv", "TestFunction"))
测试失败,因为没有引发 ValueError。如果我设置一个断点并观察单个步骤,我可以看到 ValueError 被引发并被记录 ( print_log)。
print_log
我试图设置raise ValueError("Given a completly wrong / empty file or a directorys.")尝试的外部…除了…阻止,但没有运气。测试成功后,当我检查是否引发异常时,我添加了除 ValueError 之外的所有附加内容。也没有运气。
raise ValueError("Given a completly wrong / empty file or a directorys.")
谁能告诉我,为什么尽管引发了 ValueError 测试还是失败?
在您的测试示例中,assertRaises方法需要接收一个可调用的对象(函数或方法)以及可调用对象发送的异常类型。get_funcs函数assertRaises不会捕
assertRaises
get_funcs
要测试是否引发了特with语句和selfself.assertRaises。这样可以确保在``with语句
with
self
。这样可以确保在``with
以下是修改后的测试示例:
import main import unittest class UnitTestPythonTask(unittest.TestCase): def test_check_test_function(self): ''' Checks the file validation of the given .csv files ''' with self.assertRaises(ValueError): main.get_funcs({}, main.get_funcs({}, main.get_funcs "test.csv", "TestFunction")
在此测试中,with self.assertRaises(ValueError)表示希望在with语句块中的代码触发您ValueError。如果在with语句块中的代码没有ValueError,测试将失败。
with self.assertRaises(ValueError)
ValueError
请确实get_funcs函数中引发异常的代码在测试中的with语句块内部。如果在get_funcs函数中引发异常的代码在try语句块外部,则异常将被捕获,导致测试失败。
try