13

ASP.Net MVC を使用した後、Rails について考えるようになりました。以前は Rails を使用していましたが、少しさびています。ASP.Net MVC チュートリアルでは、リポジトリ パターンを使用してデータ レイヤーの実装を非表示にすることを推奨しています。これにより、単体テストの依存性注入がより簡単になり、モデル実装からコントローラーを適切に切り離すことができます。

Active Record オブジェクトを直接使用する Rails のコントローラーと、簡単にセットアップおよび破棄できるテスト データベースを使用した単体テストを覚えています。これにより、ユニット テストのためにスワップ アウトする必要がなくなりますが、それでも、あまりにも多くの ActiveRecord コードをコントローラーで公開するのは良くない考えのように思えます。

私の質問は、ここでの最新のベストプラクティスは何ですか? 実際の (モックではない) データベースはまだ単体テストに使用されていますか? Rails 開発者は ActiveRecord を直接呼び出しますか、それとも抽象化しますか?

4

5 に答える 5

9

私の経験では、Ruby on Rails は ActiveRecord を非常に緊密に統合しており (ほとんどの場合、ほぼ完全に透過的になる可能性があります)、開発者は抽象化なしで使用することがよくあります。

覚えておくべきことは、Repository パターンと Active Record パターンは両方とも、Martin Fowler による Patterns of Enterprise Architecture で提案されたことです (まだ読んでいない場合は、読む必要があります)。Active Record は Rails に緊密に統合されています。Microsoft .NET はパターンに結び付けられないため、大部分の開発者はリポジトリ パターンを採用しました。

于 2009-11-03T23:24:52.430 に答える
2

どちらの方法でも実行できます。ほとんどの場合、Rails の機能テストはデータベースに至るまで書かれており、そこではフィクスチャからデータが取り込まれます。

ただし、サービス層の呼び出しをモックアウトすることは珍しくありません。たとえば、次のようになります。

User.expects(:find_by_id).with("1").returns(u);
get :show, :id=>"1"

...またはそのようなもの。実際、私はこれを常に行っており、モデル オブジェクトを制御しています (またはモック アウトも同様です)。

于 2009-11-05T08:02:19.517 に答える
0

Rails の慣例に従うことは、常に最も苦痛の少ない記憶への道を導くので、お勧めします。

「本物」の定義に応じて...ユニットテストでは、メインサイトと同じデータスキーマを使用し、テストが実行される前/テスト中にデータベースをシードする傾向があることがわかりました(Factory Girlを使用して、マシニスト、または普通のフィクスチャ) であり、そのデータに基づいてテストが実行されます。

Rails 開発者は、現実の世界と同様に、このデータに対して直接 ActiveRecord を呼び出します。

于 2009-11-04T01:14:33.357 に答える
-1

コントローラーは、MVC のモデルにアクセスすることになっています。Rails は、エンタープライズの世界を特徴付ける不要な抽象化を回避することを目的としています。

于 2009-11-04T10:22:58.930 に答える