1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

あまねAdvent Calendar 2022

Day 18

RSpecでのテクニックをpytestで実行するための逆引きメモ

Last updated at Posted at 2022-12-21

背景

副業のプロダクト開発で、pytestを使ってユニットテストを書いています。
それまでRubyのRSpecでしか書いたことがなく、他の言語・フレームワークでのテストの書き方について戸惑った箇所があったので、今回は僕と同じようにRSpecを書いていた人がpytestを書くときに役立つような話を書きたいと思います。

知っておいてよかったこと

普段はRSpecでの書き方に慣れているため、pytestでのテストの書き方に最初は戸惑っていましたが、いくつかpytestでもRSpecでよく使う機能と同じことができることがわかりましたので、よくつかうものを紹介します。

pytestでは-kオプションをつけることで、実行するテストを指定できる

まずはテストの実行時です。
RSpecでは、実行ファイルを指定した後に:を続けて実行する行数も指定することできます。

$ rspec spec/sample_spec.rb:12

pytestでは-kオプションをつけることで、実行するテストを指定することができます。
ただし、渡した文字列と完全一致ではなくて部分一致するテストが実行されるので、注意です。

$ pytest -k sample_test

とした場合にはsample_testを含むsample_test_1や sample_test_2という名前のテストが実行されます。

fixtureでテスト前にモックやダミーデータの準備ができる

RSpecではbefore句を使うことでテスト前に実行したい処理を記述できます。

before do
   # テスト前に実行したい処理
end

こちらはpytestではfixtureを使ってデータを用意したりします。

下記で使い方を書いたので、もしご興味があればこちらも読んでいただければと思います。

ダミーデータを用意するにはfactory_boyが使える

ダミーデータの用のために、僕はRSpecではfactorybotを用いて実現してきました。

FactoryBot.define do
  factory :user do
    name { 'name' }
  end
end

これと同様のものを、pytestではfactoryboyを使って実現できます。

import factory
from app.models import User

class UserFactory():
    class Meta:
        model = User
    name = 'name'

pdb.set_trace()でデバッガを呼び出せる

テストの途中でコンソールを使ってデバッグを行いたいときなどにはRailsだとbinding.pryなどを使います。

requre 'pry';binding.pry

pytestではどうするpdb.set_trace()を使うことができます。

import pdb
pdb.set_trace()

また、実行時に--pdbオプションをつけてテスト実行すると、テストが失敗した際に自動的にデバッガを起動してくれるので便利です。

$ pytest --pdb sample_test

参考

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?