Testing¶
Django gRPC framework includes a few helper classes that come in handy when writing tests for services.
The test channel¶
The test channel is a Python class that acts as a dummy gRPC channel,
allowing you to test you services. You can simulate gRPC requests on a
service method and get the response. Here is a quick example, let’s open
Django shell python manage.py shell:
>>> from django_grpc_framework.test import Channel
>>> channel = Channel()
>>> stub = post_pb2_grpc.PostControllerStub(channel)
>>> response = stub.Retrieve(post_pb2.PostRetrieveRequest(id=post_id))
>>> response.title
'This is a title'
RPC test cases¶
Django gRPC framework includes the following test case classes, that mirror
the existing Django test case classes, but provide a test Channel
instead of Client.
RPCSimpleTestCaseRPCTransactionTestCaseRPCTestCase
You can use these test case classes as you would for the regular Django test
case classes, the self.channel attribute will be an Channel instance:
from django_grpc_framework.test import RPCTestCase
from django.contrib.auth.models import User
import account_pb2
import account_pb2_grpc
class UserServiceTest(RPCTestCase):
def test_create_user(self):
stub = account_pb2_grpc.UserControllerStub(self.channel)
response = stub.Create(account_pb2.User(username='tom', email='tom@account.com'))
self.assertEqual(response.username, 'tom')
self.assertEqual(response.email, 'tom@account.com')
self.assertEqual(User.objects.count(), 1)