Assignment 2 - Unit testing
Practice implementing and testing simple functions.
You are getting the first edition of all these pages. Please let me know if you find an error!
Updates - Sep 23
- Due date extended to Sunday, Sep 29
- Added requirement to create control flow graphs (CFGs) for source functions.
Objective
The goal of this assignment is to gain more practice with the tools we have used so far, including implementing a unit test with pytest
.
Instructions
The assignment is to be completed alone. Refer to the Syllabus for policies on what is allowed and what is not.
Setup
- Create an
assn2/
subdirectory in yourseng-201/
directory using the CLI. - Download
grades.py
.- If using WSL, use the Explorer to drag to
grades.py
to your home folder on the Ubuntu side.
- If using WSL, use the Explorer to drag to
- Use the CLI to move grades.py into the new
assn2/
directory.
Implementation
- Put your name at the top.
- You may not change the
main()
function in any way. - You may add to the
__main__
block to help test if you want. - Complete the functions
calculate_average()
anddetermine_grade()
according to their docstring descriptions:- The docstring tells you what the function must do, the parameters passed to it, the type that must be returned, and any exceptions you need to raise.
- You may not add any parameters, change the return type, or add to or alter the exceptions required.
- You must not call
print()
orinput()
from these functions.
Testing
You will be create a test file and run it using pytest.
- Create a test file for
grades.py
. - Put your name at the top of your test file in a comment.
- Write one or more test cases in your test file for
calculate_average()
.- The test case must invoke
calculate_average()
by providing a list, e.g.,calculate_average([1,2,6])
. Useassert
statements to ensure the computed value is correct. You should have multiple asserts to check the calculation. - You must write test cases that check the exceptional conditions that raise value errors. Refer to the lab on testing for exceptions.
- The test case must invoke
- Write one or more test cases in your test file for
determine_grade()
. This function does not knowingly raise exceptions, so you do not need to test for them. Test only for expected output given an input.
Rubric
- (15 pts): Your implementation of
calculate_average()
passes my test cases, which exercises all the details of the function’s docstring. - (10 pts): Your implementation of
determine_grade()
passes my test cases, which exercises all the details of the function’s docstring. - (15 pts): (NEW REQUIREMENT) Create a control flow graph (CFG) for each of your implementations of
calculate_average()
anddetermine_grade()
following the rules from class.- You may use an online flow chart tool such as draw.io, Canva, or Lucidchart.
- You may draw your CFG on paper and take a picture. Ensure it is legible.
- In both cases, export your CVG image to a PDF to submit to Canvas.
- (25 pts): Your test file can be run using
pytest
, has multiple test cases, and thoroughly tests the parameters, returns, computations, and exceptions raised of the functions as specified by their docstrings. - Your assignment will receive a score of 0 pts for any of the following:
print()
orinput()
statements incalculate_average()
ordetermine_grade()
- Changing
main()
in any way - Changing the method signature of
calculate_average()
ordetermine_grade()
- Your code or tests fail due to syntax error.
Submission due Sep 29
Submit your grades.py
, your test file
, and your CFG PDF file to the Canvas assignment page.