# 20.9. Group Work on Unit Tests¶

It is best to use a POGIL approach with the following. In POGIL students work in groups on activities and each member has an assigned role. For more information see https://cspogil.org/Home.

Note

If you work in a group, have only one member of the group fill in the answers on this page. You will be able to share your answers with the group at the bottom of the page.

Content Learning Objectives

After completing this activity, students should be able to:

• Use assert methods to test code (assertEqual and assertAlmostEqual, assertIsInstance)

• Test code that doesn’t return a value

It is important to learn how to write good tests, this is especially true if other people will use your code, but it is also true when it is just for your own use.

## 20.9.1. Assert methods¶

There are many assert methods that you can use in your tests. See https://docs.python.org/3/library/unittest.html for the documentation. You will mostly use assertEqual, but here are a few others that are very useful.

Method

What the Method Tests

assertEqual(a,b)

a == b

assertTrue(x)

x == True

assertGreater(a,b)

a > b

assertGreaterEqual(a,b)

a >= b

assertIn(a,b)

a in b

assertIsInstance

isinstance(a, b)

assertAlmostEquals(a,b,p)

round(a-b, p) == 0, the default for p (num places after decimal point) is 7

Note

All the assert methods also take an optional message (string) to display as the last parameter.

## 20.9.2. Writing Unit Tests¶

When you create tests you want to test the usual things as well as edge cases (unusual things). For example, when working with lists what is the result when the list is empty? When working with numbers be sure to test positive and negative numbers.

Read the description of the function below. How many test cases do you need to test this function?

Write a function is_descending(nums) that returns True if the numbers in the list nums are sorted in descending order and False otherwise. If the list nums has less than two numbers in it return True. For example, is_descending([3, 2, 1]) should return True, is_descending() should also return True, and is_descending([1,2,3]) should return False.

Add a test to the testOne function above to test when nums is the empty list. Add tests to check what happens when all numbers are descending except the first, middle, or last. Add tests that check that it works for unusual values such as negative numbers or zero.

Read the description of the function below. How many test cases do you need to test this function?

Write a function temp_cat(value) that returns "low" if value is < 97, normal if value is >= 97 and <= 99, and high if value is > 99. Add more test cases to check the three possible return values ("low", "normal", and "high").

Did you check when value equals 97 and is greater than 97? Did you check when value was equal to 99? What happens if value is a floating point number like 98.7 or 102.4?

Use assertEqual if the values you are comparing are integers or strings. Use assertAlmostEqual if the values are floating point numbers (especially if they are calculated by the computer). This method takes the two items to compare, the number of decimal places to compare (the default is 7), and a string describing the test.

Write a total method in the Order class to return the total of all of the prices for the items in the order. Then add a test to testTotal to test the total of o2.

Note

Remember that the setUp method is called before every method of the class myTests and that the methods are not called in the order they are written.

It is easy to test a function or method that returns a value, but how do you test when no value is returned? For example, the set_price method below doesn’t return anything, but it should change the price. You can test that the price changed from the original value as shown below.

Write a set_name method that changes the current object’s name and then add a new method test_set_name to test set_name.

Note

To test a method or function in a test method be sure to call the method or function.

Testing with inheritance. If you have asked someone to create a class that inherits from another class you might want to check that they specified the inheritance correctly. You can use assertIsInstance to check if an object is an instance of a class.

Create a subclass of the Animal class named Duck that overrides the inherited noise method to return "Quack". Also create a test to check that the noise method in Duck returns the correct string.

If you worked in a group, you can copy the answers from this page to the other group members. Select the group members below and click the button to share the answers.

The Submit Group button will submit the answer for each each question on this page for each member of your group. It also logs you as the official group submitter.