テストのベストプラクティスのリストはありません。それはあなたとあなたが取り組んでいる特定のプロジェクトのために働く多くのものです。彼が言うとき、私はピリクに同意します:
テスト方法に基づいてソフトウェアを設計するべきではありません
ただし、優れたモジュール式のソフトウェア設計があれば、適切にテストするのは簡単です。
私は最近、自分の仕事で単体テストに少し興味があり、Pythonでいくつかの面白くて便利なツールを見つけました。テストのsetUp()メソッドで多くのオブジェクトを準備する代わりに、 FactoryBoyはそれらのツールの1つです。クラスでは、モデルごとにファクトリを定義し、必要に応じてそれらを一括で生成できます。
Mockerを試すこともできます。これは、オブジェクトをモックするライブラリです。Pythonではすべてがオブジェクトであるため、関数もモックできます。特定の時刻にXイベントを生成する関数をテストする必要がある場合に便利です。たとえば、午前10時にメッセージを送信し、常に「10:00 am」を返すdatetime.datetime.now()のモックを作成し、そのモックでその関数を呼び出します。
フロントエンドもテストする必要がある場合、またはテストに人間との対話が必要な場合(OAuthを実行する場合など)、Seleniumを使用してこれらのフォームに入力して送信します。
あなたの場合、FactoryBoyとの関係を持つオブジェクトを準備するために、Factory._prepare()メソッドを上書きしてみることができます。この単純なdjangoモデルでそれを実行しましょう。
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(User, blank=True, null=True)
# ...
それでは、簡単なUserFactoryを定義しましょう。
class UserFactory(factory.Factory):
FACTORY_FOR = User
first_name = 'Foo'
last_name = factory.Sequence(lambda n: 'Bar%s' % n)
username = factory.LazzyAttribute(lambda obj: '%s.%s' % (obj.first_name, obj.last_name))
ここで、ファクトリが5つのメンバーを持つグループを生成する必要がある、または必要だとしましょう。GroupFactoryは次のようになります。
class GroupFactory(factory.Factory):
FACTORY_FOR = Group
name = factory.Sequence(lambda n: 'Test Group %s' % n)
@classmethod
def _prepare(cls, create, **kwargs):
group = super(GroupFactory, cls)._prepare(create, **kwargs)
for _ in range(5):
group.members.add(UserFactory())
return group
これがお役に立てば幸いです、または少なくともあなたに光を与えました。ここでは、私が言及したツールに関連するリソースへのリンクをいくつか残しておきます。
ファクトリーボーイ:https ://github.com/rbarrois/factory_boy
モッカー: http: //niemeyer.net/mocker
Selenium:http ://selenium-python.readthedocs.org/en/latest/index.html
そして、テストに関するもう1つの便利なスレッド:
Djangoで「異なるレイヤー」をテストするためのベストプラクティスは何ですか?