空のクエリセットの場合、keithhackbarth が既に述べているようnone
に、単純に使用します。
ただし、値のリストを返すクエリセットをモックするには、モデルのマネージャーでモックを使用することを好みます。spec
例として (Python 2.7 スタイル -外部の Mock ライブラリを使用しました)、クエリセットがフィルター処理されてからカウントされる簡単なテストを次に示します。
from django.test import TestCase
from mock import Mock
from .models import Example
def queryset_func(queryset, filter_value):
"""
An example function to be tested
"""
return queryset.filter(stuff=filter_value).count()
class TestQuerysetFunc(TestCase):
def test_happy(self):
"""
`queryset_func` filters provided queryset and counts result
"""
m_queryset = Mock(spec=Example.objects)
m_queryset.filter.return_value = m_queryset
m_queryset.count.return_value = 97
result = func_to_test(m_queryset, '__TEST_VALUE__')
self.assertEqual(result, 97)
m_queryset.filter.assert_called_once_with(stuff='__TEST_VALUE__')
m_queryset.count.assert_called_once_with()
ただし、質問を満たすために、return_value
forを設定する代わりに、から返されるモデル インスタンスのcount
になるように簡単に調整できます。list
all
連鎖はfilter
、モック化されたクエリセットを返すように設定することで処理されることに注意してください。
m_queryset.filter.return_value = m_queryset
exclude
これは、テスト対象の関数で使用されるすべてのクエリセット メソッド (例:など) に適用する必要があります。