class SimpleTestCase
unittest.TestCase 에서 기능을 확장합니다.
유용한 assertion 들이 있습니다.
수정된 설정 값으로 테스트가 실행되게 할 수 있습니다.
client 와 Client 를 사용할 수 있습니다.
데이터베이스 쿼리를 사용하여 테스트를 실행 하려면 서브클래스인 TransactionTestCase 나 TestCase 를 사용해야 합니다.
class TransactionTestCase
SimpleTestCase 를 상속하고 몇 가지 데이터베이스 관련 기능을 추가합니다.
ORM 을 좀 더 쉽게 사용하기 위해 데이터베이스를 초기 상태로 재설정 할 수 있습니다.
데이터베이스 fixtures 를 제공합니다.
데이터베이스 백엔드 기능을 기반으로 하는 테스트를 스킵합니다.
이 외 특별한 assert* 함수들을 제공합니다.
Django의 TestCase 클래스는 자주 쓰이며 각 테스트 마다 데이터베이스 트랜잭션 기능을 사용하여 초기 상태를 빠르게 만들어 주는 TransactionTestCase 의 서브클래스 입니다. 하지만 그로 인해 Django TestCase 클래스를 사용하면 특정 데이터베이스의 행위를 테스트하지 못합니다. 예를 들면, select_for_update() 를 사용할 때 트랜잭션 내에서 코드 블록이 실행되고 있는지 테스트할 수 없습니다. 이런 경우 TransactionTestCase 를 사용해야 합니다.
TransactionTestCase 와 TestCase 는 데이터베이스를 테스트 상태로 리셋하는 방식과 커밋과 롤백의 영향 테스트를 위한 테스트 코드 기능을 제외하고는 동일합니다.
TransactionTestCase 테스트 실행 후 모든 테이블을 truncate 하여 데이터베이스를 리셋합니다. TransactionTestCase 는 커밋과 롤백을 호출하고 이들이 데이터베이스에 미치는 영향을 관찰할 수 있습니다.
반면에 TestCase 는 테스트 후 truncate 테이블을 사용하지 않습니다. 대신, 테스트 종료시에 롤백되는 데이터베이스 트랜잭션에 테스트 코드를 포함시킵니다. 이는 테스트 종료시 초기 상태로 데이터베이스가 복원된는 롤백을 보장합니다.
롤백이 지원되지 않는 데이터베이스에서 실행되는 TestCase 와 모든 TransactionTestCase 의 인스턴스는 테스트 종료 시 테스트 데이터베이스의 모든 데이터를 지우는 방식으로 롤백 될 것입니다.
TestCase 본문에 serialized_rollback=True 를 설정하여 초기 데이터를 다시 로드할 수 있습니다.
class TestCase
Django에서 테스트 작성 시 가장 일반적으로 사용하게 되는 클래스입니다. TransactionTestCase 를 상속합니다. 당신의 Django 애플리케이션이 데이터베이스를 사용하지 않는다면 SimpleTestCase 를 사용합니다.
두 개의 중첩 atomic() 블락으로 테스트를 감싸고 있습니다. 각 테스트 마다 하나, 전체 클래스에 하나 존재합니다. 따라서, 특정 데이터베이스의 트랜잭션 동작 테스트를 원한다면 TransactionTestCase 를 사용합니다.
각 테스트가 종료될 때 지연가능한 데이터베이스 제약사항들을 확인합니다.
또한 추가적인 기능들을 메소드로 제공합니다.
classmethod TestCase.setUpTestData()
위에서 설명된 클래스 수준의 atomic 블락을 사용하여 전체 TestCase 대상으로 클래스 수준으로 초기 데이터를 한 번만 만들 수 있습니다.
이 기술을 사용하면 setUp() 을 사용할 때보다 더 빠른 테스트가 가능합니다.
트랜잭션을 지원하지 않는 데이터베이스(예, MySQL에서 MyISAM 엔진을 사용)에서 테스트를 실행한다면 setUpTestData() 는 각 테스트 전에 매번 호출되고 성능 상 이점을 갖지 못합니다.
테스트 메소드에서 **setUpTestData()**에서 생성된 어떠한 객체도 수정하지 않도록 주의해야 합니다. 클래스 수준의 설정 작업에서 메모리 객체의 수정은 테스스 메소드 간에 유지됩니다. 이것들의 수정이 필요하다면, setUp() 메소드에서 refresh_from_db() 를 사용하여 리로드 할 수 있습니다.
class LiveServerTestCase
LiveServerTestCase 는 기본적으로 한 가지 기능을 제외하고 TransactionTestCase 와 비슷합니다. 시작 시 백그라운드에서 setup 시 라이브 Django 서버를 시작하고 teardown 시 서버를 종료합니다. Django dummy client 이외의 자동화된 테스트 클라이언트(Selenium 클라이언트 같은)를 사용 가능하게 하여 브라우저에 일련의 기능 테스트를 실행하고 실제 유저의 행동을 시뮬레이션 할 수 있습니다.
라이브 서버는 localhost