Otherwise, you could read unit tests and determine if programmers are covering the most important cases and suggest new scenarios.
In order to do it, I propose these validations:
Size:
For collections:
- Test with an empty collection
- A collection with 1 item
- The smallest interesting case
- A collection with several items
Dichotomies:
- Vowels / Non-vowels
- Even / Odd
- Positive / Negative
- Empty / Full.
Boundaries:
- If the function behaves differently for values near a particular threshold.
Order:
- If the function behaves differently when the values are in different orders. Identify each of those orders.
Example in Python:
import unittest
class TestStockPriceSummary(unittest.TestCase):
""" Test class for function a1.stock_price_summary. """
def test_empty_list(self):
"""
Return an empty tuple when price_changes is empty.
"""
price_changes = []
actual = a1.stock_price_summary(price_changes)
expected = (0,0)
self.assertEqual(actual,expected)
def test_single_item_positive(self):
'''
Test when the list only includes a positive item
'''
price_changes = [2.45]
actual = a1.stock_price_summary(price_changes)
expected = (2.45,0)
self.assertEqual(actual,expected)
def test_single_item_negative(self):
'''
Test when the list only includes a negative item
'''
price_changes = [-2.45]
actual = a1.stock_price_summary(price_changes)
expected = (0,-2.45)
self.assertEqual(actual,expected)
def test_single_item_zero(self):
'''
Test when the list contains only an item = 0
'''
price_changes = [0]
actual = a1.stock_price_summary(price_changes)
expected = (0,0)
self.assertEqual(actual,expected)
def test_general_case(self):
"""
Return a 2-item tuple where the first item is the sum of the gains in price_changes and
the second is the sum of the losses in price_changes.
"""
price_changes = [0.01, 0.03, -0.02, -0.14, 0, 0, 0.10, -0.01]
actual = a1.stock_price_summary(price_changes)
expected = (0.14, -0.17)
self.assertEqual(actual,expected)
if __name__ == '__main__':
unittest.main(exit=False)






