MCPcopy
hub / github.com/qodo-ai/qodo-cover / validate_test

Method validate_test

cover_agent/UnitTestValidator.py:370–666  ·  view source on GitHub ↗

Validate a generated test by inserting it into the test file, running the test, and checking for pass/fail. Parameters: generated_test (dict): The generated test to validate, containing test code and additional imports. num_attempts (int, optional): The numb

(self, generated_test: dict)

Source from the content-addressed store, hash-verified

368 return ""
369
370 def validate_test(self, generated_test: dict):
371 """
372 Validate a generated test by inserting it into the test file, running the test, and checking for pass/fail.
373
374 Parameters:
375 generated_test (dict): The generated test to validate, containing test code and additional imports.
376 num_attempts (int, optional): The number of attempts to run the test. Defaults to 1.
377
378 Returns:
379 dict: A dictionary containing the status of the test validation, including pass/fail status, exit code, stderr, stdout, and the test details.
380
381 Steps:
382 0. Assume each generated test is a self-contained independent test.
383 1. Extract the test code and additional imports from the generated test.
384 2. Clean up the additional imports if necessary.
385 3. Determine the relevant line numbers for inserting tests and imports.
386 4. Adjust the indentation of the test code to match the required indentation.
387 5. Insert the test code and additional imports into the test file at the relevant lines.
388 6. Run the test using the Runner class.
389 7. Check the exit code to determine if the test passed or failed.
390 8. If the test failed, roll back the test file to its original content and log the failure.
391 9. If the test passed, check if the code coverage has increased using the CoverageProcessor class.
392 10. If the coverage has not increased, roll back the test file and log the failure.
393 11. If the coverage has increased, update the current coverage and log the success.
394 12. Handle any exceptions that occur during the validation process, log the errors, and roll back the test file if necessary.
395 13. Log additional details and error messages for failed tests, and optionally, use the Trace class for detailed logging if 'WANDB_API_KEY' is present in the environment variables.
396 """
397 # Store original content of the test file
398 with open(self.test_file_path, "r") as test_file:
399 original_content = test_file.read()
400
401 try:
402 # Step 0: no pre-process.
403 # We asked the model that each generated test should be a self-contained independent test
404 test_code = generated_test.get("test_code", "").rstrip()
405 additional_imports = generated_test.get("new_imports_code", "").strip()
406 if (
407 additional_imports
408 and additional_imports[0] == '"'
409 and additional_imports[-1] == '"'
410 ):
411 additional_imports = additional_imports.strip('"')
412
413 # check if additional_imports only contains '"':
414 if additional_imports and additional_imports == '""':
415 additional_imports = ""
416 relevant_line_number_to_insert_tests_after = (
417 self.relevant_line_number_to_insert_tests_after
418 )
419 relevant_line_number_to_insert_imports_after = (
420 self.relevant_line_number_to_insert_imports_after
421 )
422
423 needed_indent = self.test_headers_indentation
424 # remove initial indent of the test code, and insert the needed indent
425 test_code_indented = test_code
426 if needed_indent:
427 initial_indent = len(test_code) - len(test_code.lstrip())

Calls 4

extract_error_messageMethod · 0.95
run_commandMethod · 0.80
logMethod · 0.80

Tested by

no test coverage detected