2014-07-23 19 views
9

Tôi đã tiếp xúc với mô hình cơ sở dữ liệu bằng cách sử dụng bộ khung và bộ định tuyến khung nhìn Django-rest, và tôi đang cố gắng viết các bài kiểm tra đơn vị cho nó.Làm thế nào để viết các bài kiểm tra đơn vị cho djiu-rest-framework api?

Dưới đây là API của tôi và mã kiểm tra

Viewsets.py

class Model1ViewSet(viewsets.ReadOnlyModelViewSet): 

    model = Model1 
    serializer_class = Model1Serializer 
    filter_class = Model1Filter 
    filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter) 
    ordering = ('id', 'cl1') 

Serializer.py

class Model1Serializer(serializers.HyperlinkedModelSerializer): 
    chip = serializers.HyperlinkedRelatedField(view_name="some-detail") 

    class Meta: 
     model = Model1 
     fields = ('url', 'id', 'cl1', 'cl2', 'cl3', 'cl4') 
     depth = 1 

Unit-kiểm tra

from rest_framework.test import APIClient 

class TestModel1Api(unittest.TestCase): 

    def setUp(self): 
     self.client = APIClient() 

    def test_Model1_list(self): 
     response = self.client.get(reverse('Model1-list')) 
     self.assertEqual(response.status_code, status.HTTP_200_OK) 

    def test_Model1_detail(self): 
     mm_objs = Model1.objects.all() 
     if mm_objs: 
      response = self.client.get(reverse('Model1-detail', args=[mm_objs[0].id])) 
      self.assertEqual(response.status_code, status.HTTP_200_OK) 

Tôi không muốn để kết nối với cơ sở dữ liệu để kiểm tra đơn vị vì nó nằm trong các thử nghiệm tích hợp.

Có cách nào để giả lập cơ sở dữ liệu không? Tôi biết làm thế nào để áp dụng chế nhạo cho các chức năng xem tiêu chuẩn nhưng ở đây chế giễu không hoạt động.

  1. Làm cách nào để viết các bài kiểm tra đơn vị cho REST-API của tôi?
  2. Làm thế nào để giả lập cơ sở dữ liệu trong các bài kiểm tra đơn vị của tôi?
+0

Tôi không quen thuộc với dự án này vì vậy tôi không thể giúp bạn cụ thể ở đó nhưng hãy tìm tài liệu để tìm lớp/chức năng nào thực sự kết nối với cơ sở dữ liệu và giả lập trong thử nghiệm của bạn. –

+1

Nếu bạn muốn kiểm tra API, bạn không thể sử dụng kiểm tra đơn vị nào cả. Kiểm tra API có nghĩa là gọi chế độ xem và nhận dữ liệu được định dạng tốt từ cơ sở dữ liệu thử nghiệm. Đây sẽ là một bài kiểm tra tích hợp như bạn đã viết. Sự khác biệt giữa các bài kiểm tra đơn vị và tích hợp không chỉ chạm vào cơ sở dữ liệu hay không. – Norman8054

Trả lời

2

Khi bạn chạy manage.py test thì cơ sở dữ liệu của bạn sẽ được tạo nhưng cơ sở dữ liệu không chứa dữ liệu. Để thực hiện điều đó, bạn có thể tự mình tạo các đối tượng cần thiết hoặc sử dụng một cái gì đó như FactoryBoy

Chỉ cần nhớ rằng cơ sở dữ liệu được làm sạch dữ liệu từ các phương pháp thử trước đó khi bắt đầu một phương pháp mới.

+1

Tôi tò mò làm thế nào người ta có thể tránh việc sử dụng cơ sở dữ liệu, mặc dù. Trong FactoryBoy, bạn có thể sử dụng một cái gì đó như '.prepare()' thay vì '.make()' cho các công thức để ngăn không cho nó tồn tại trong cơ sở dữ liệu nhưng sau đó chúng sẽ không hiển thị khi bạn gọi ... –

+0

FactoryBoy hỗ trợ phương thức .build() tạo đối tượng nhưng nó không được lưu trong cơ sở dữ liệu và sẽ không có bộ 'id'. Bạn có thể tạo một số dữ liệu ban đầu sẽ được nạp trong khi tạo cơ sở dữ liệu thử nghiệm và bạn sẽ không phải điền các bảng mỗi khi bạn chạy một phương thức thử mới (bạn có thể sử dụng cùng một đối tượng 'người' nhiều lần) nhưng đã không tìm thấy một giải pháp tốt hơn – timop

+0

timop: Ah có, bạn nói đúng. Tôi đã nghĩ về mẹ mẫu trong trường hợp này và tôi nhận được các API hỗn hợp lên. Cảm ơn đã theo lên. –

Các vấn đề liên quan