You have been testing code right throughout this book; maybe without even realizing it. Each time you use the Django shell to see if a function works, or to see what output you get for a given input, you are testing your code. For example, back in Chapter 2, Views and URLconfs, we passed a string to a view that expected an integer to generate a TypeError
exception.
Testing is a normal part of application development, however what's different in automated tests is that the testing work is done for you by the system. You create a set of tests once, and then as you make changes to your app, you can check that your code still works as you originally intended, without having to perform time consuming manual testing.