Introducing fixtures
Most tests need some kind of data or resource to operate on:
def test_highest_rated(): series = [ ("The Office", 2005, 8.8), ("Scrubs", 2001, 8.4), ("IT Crowd", 2006, 8.5), ("Parks and Recreation", 2009, 8.6), ("Seinfeld", 1989, 8.9), ] assert highest_rated(series) == "Seinfeld"
Here, we have a list of (series name
, year
, rating
) tuples that we use to test the highest_rated
function. Inlining data into the test code as we do here works well for isolated tests, but often you have a dataset that can be used by multiple tests. One solution would be to copy over the dataset to each test:
def test_highest_rated(): series = [ ("The Office", 2005, 8.8), ..., ] assert highest_rated(series) == "Seinfeld" def test_oldest(): series = [ ("The Office", 2005, 8.8), ..., ] assert oldest(series) == "Seinfeld"
But this gets old quickly—plus, copying and pasting things around will...