sql >> データベース >  >> RDS >> Mysql

私のアプリはリモートデータベースにアクセスします。ユニットテストを効率的に実行するにはどうすればよいですか?

    TL; DR:nulldbとテスト対応の親クラスを使用

    テストする場合はnulldbを使用し、それ以外の場合は実際のdbを使用します。方法は次のとおりです。

    まず、これをGemfileに含めます:

    group :development, :test do
      gem 'activerecord-nulldb-adapter', :git => 'git://github.com/nulldb/nulldb.git'
    end
    

    次に、通常のbundle installを実行します

    外部データベースにバックアップされているすべてのモデルの基本クラスを定義します。

    class ExternalModel < ActiveRecord::Base
      if Rails.app.test?
        establish_connection(:adapter => :nulldb)
      else
        establish_connection(:myapp)
      end
    
      def readonly?; true; end
    end
    

    次に、すべての外部モデルがExternalModelから継承します(最初からこれを行う必要があります):

    class ExternalUser < ExternalModel
      ...
    end
    

    テスト環境で実行すると、外部テーブルへの接続は試行されません。もちろん、ExternalUserのインスタンスにアクセスしようとすると失敗しますが、統合テスト中に外部データベースとの接続を選択的に確立するか、それ以外の場合は外部モデルへの参照をスタブまたはモックすることができます。

    最も重要なことは、すべてのテストが非常に高速に実行されるようになったことです。




    1. 同じテーブル内の2つの日付範囲を比較する

    2. MAXまたはOrderByLimit1を選択します

    3. 一意のランダム番号を生成するPHPMySQL

    4. MySQL行からのデータの乗算