Django (1.2 beta) sẽ đặt lại (các) cơ sở dữ liệu giữa mỗi lần chạy thử, nghĩa là mỗi lần chạy thử trên một DB trống. Tuy nhiên, (các) cơ sở dữ liệu không phải là đỏ bừng. Một trong những ảnh hưởng của việc xả cơ sở dữ liệu là các bộ đếm auto_increment
được đặt lại.Django có thể xóa (các) cơ sở dữ liệu của nó giữa mỗi bài kiểm tra đơn vị không?
Xem xét một thử nghiệm mà kéo dữ liệu ra khỏi cơ sở dữ liệu bằng cách khóa chính:
class ChangeLogTest(django.test.TestCase):
def test_one(self):
do_something_which_creates_two_log_entries()
log = LogEntry.objects.get(id=1)
assert_log_entry_correct(log)
log = LogEntry.objects.get(id=2)
assert_log_entry_correct(log)
này sẽ vượt qua bởi vì chỉ có hai mục log đã từng tạo ra. Tuy nhiên, nếu một thử nghiệm khác được thêm vào ChangeLogTest
và nó sẽ xảy ra để chạy trướctest_one
, các khóa chính của các mục nhập nhật ký không còn 1 và 2, chúng có thể là 2 và 3. Bây giờ test_one
không thành công.
Đây thực sự là một câu hỏi hai phần:
- Có thể để buộc
./manage.py test
để tuôn ra những cơ sở dữ liệu giữa mỗi trường hợp thử nghiệm? - Vì Django không tuôn ra DB giữa mỗi bài kiểm tra theo mặc định, có thể có lý do chính đáng. Có ai biết không?
Tôi đoán điều đó sẽ hoạt động vì 'LogEntry.objects.all()' luôn trả về các bản ghi theo cùng một thứ tự (tăng khóa chính), phải không? –
không xác định, nhưng có thể là có. Nếu bạn muốn chắc chắn, chỉ cần sắp xếp kết quả theo id –
@Mike, Ivan: ..hoặc thêm 'ordering = ('id',)' vào Model.Meta –