我有一个使用elasticsearch的Django应用。我想拥有100%的代码测试覆盖率,因此我需要测试对Elasticsearch(本地“安装”)的API调用。
所以我的问题是:模拟整个elasticsearch更好还是应该运行elasticserver并检查结果?
IMO最好模拟elasticsearch并仅检查python代码(测试是否使用正确的参数调用了所有内容)。
您可以编写一些实际上正在调用elasticsearch的基本集成测试,然后用单元测试介绍视图,模型等内部其余的相关方法。这样,您可以测试所有内容,而不必模拟elasticsearch,并发现可能不会出现的错误/行为。
我们正在使用django haystack(https://github.com/django-haystack/django- haystack),它为搜索后端提供了统一的api,其中包括elasticsearch以及以下管理命令:
您可以将以上内容包装在基本集成测试类中,以管理搜索索引。例如:
from django.core.management import call_command from django.test import TestCase from model_mommy import mommy class IntegrationTestCase(TestCase): def rebuild_index(self): call_command('rebuild_index', verbosity=0, interactive=False) class IntegrationTestUsers(IntegrationTestCase): def test_search_users_in_elasticsearch(self): user = mommy.make(User, first_name='John', last_name='Smith') user = mommy.make(User, first_name='Andy', last_name='Smith') user = mommy.make(User, first_name='Jane', last_name='Smith') self.rebuild_index() # Search api and verify results e.g. /api/users/?last_name=smith