問題タブ [isolation-frameworks]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - 合理化された Ruby コードのデプロイ
これが私の想像上の開発と展開のプロセスです。
- プロジェクト ディレクトリを作成します
my_project
。 - そこに必要な Ruby バージョンをインストールします。
- 必要な gem をインストールします。
- コードを書きます。
fpm
全体を梱包するために使用します。- debian パッケージを製品ボックスに送り、インストールします。
私は RVM と Bundler を使用していくつかの問題点に対処していますが、RVM は再配置可能な Ruby インストールの作成を気にしないため~/.rvm/rubies
、プロジェクト ディレクトリに移動してすべてがうまくいくと期待することはできません。あらゆる種類のハードコードされ#!
た行を書き直す必要があり、場合によっては.so
ファイルをlib
ディレクトリに移動する必要があります。インターネットを精査して一連のスクリプトをハッキングし、それらを組み合わせて、私が望むことを達成しましたが、全体が巨大なハックのように感じます.
完全に再配置可能な Ruby インストールを可能にする何かを構築するために使用できるhttps://github.com/ot/bptに偶然出くわしましたが、そのプロジェクトは 2 年以上触れられていないので、少し躊躇しています。その上に何かを構築すること。
私が見ていないこの問題に対するよりエレガントな解決策はありますか? Ruby プロジェクトをどのように分離してデプロイするのでしょうか? これは解決すべき問題だと思います。
c# - レガシ コードの分離テストのために c#.net でメソッド呼び出しを記録して再生するにはどうすればよいですか
レガシ コードにリポジトリとそのリポジトリのコンシューマがあります。
コンシューマは、リポジトリに対して複数のメソッド呼び出しを行います。
各メソッド呼び出しは、巨大な結果セットを返します。
コンシューマとリポジトリがどのように動作するかを確認する統合テストがありますが、私には十分ではありません.データベース接続に依存しており、非常に遅く、テストが失敗したかどうかを知るのに役立ちません.リポジトリ、データベース、またはコンシューマへの変更。
この統合テストを変換して、リポジトリの実装とは無関係に、消費者を分離してテストしたいと思います。
しかし、これはレガシー コードであり、その動作をまだ完全には理解していません。また、結果セットが巨大であるため、手動でリポジトリをスタブ化することはできません。これを手書きで書くことができれば、次のようになります。
だから私がやりたいのは(一度)
その後
私は、この問題を一般的に解決するために、プロキシとして機能し、インターフェイスの境界を越えるトラフィックを記録および再生する汎用ツールの開発に着手しました。
すでにこのようなものはありますか?
リポジトリのスタブ化の問題を解決する他の方法はありますか
- 大規模なデータセットを返す
- データセットの内容が、既存の動作を観察することによってのみ理解できる場合 (作成者の意図が明確でないため)。
そうでない場合は、この質問に対する回答としてツールを投稿します。
c# - インターフェイスまたは仮想メソッドを使用して依存関係を偽造することは、適切な設計上の選択ですか?
単体テストを学習しようとしていますが、それによる設計上の問題があります。クラス A がクラス B に依存しているとします。A を単体テストするために B のスタブを作成する場合、ほとんどの分離フレームワークでは、B がインターフェイスである必要があるか、A で使用されるすべてのメソッドが仮想である必要があります。B は、単体テストのために本質的に非仮想メソッドを持つ具象クラスにすることはできません。
これにより、製品コードの設計に大きな制限が課せられます。すべての依存関係に対してインターフェイスを作成する必要がある場合、クラスの数は 2 倍になります。単一責任の原則に従うと、相互に依存する小さなクラスが発生するため、インターフェイスの数が大幅に増加します。また、揮発性の依存関係 (将来変更される可能性があります) のインターフェイスを作成するか、設計で拡張性が必要な場合に使用します。テストのためだけにインターフェースで本番コードを汚染すると、その複雑さが大幅に増加します。すべてのメソッドを仮想化することも、良い解決策ではないようです。これにより、継承者は、これらのメソッドがオーバーライドされていなくてもオーバーライドされても問題ないという印象を与えられます。実際には、これは単体テストの副作用にすぎません。
これは、テスト可能なオブジェクト指向設計では具体的な依存関係が許可されないということですか、それとも具体的な依存関係を偽造してはならないということですか? 「ユニットテストを正しく行うには、すべての依存関係を偽造(スタブまたはモック)する必要があります」これまでに学んだことなので、後者はそうではないと思います。JustMock と Isolator 以外の分離フレームワークでは、仮想メソッドなしで具体的な依存関係を偽造することはできず、JustMock と Isolator の力が悪い設計につながると主張する人もいます。任意のクラスをモックできる機能は非常に強力であり、自分が何をしているのかを理解していれば、プロダクション コードの設計をクリーンに保つことができると思います。
unit-testing - dotnet コアの制約のない分離 (モック) フレームワーク
Xunit.net テストでいくつかのサードパーティ クラスをモックしようとして、dotnet コア プロジェクトに取り組んでいます。私が偽造しようとしているクラスは、Moq や NSubstitute のような制約のあるフレームワークではモックできません。そのためには、制約のないフレームワークが必要です。
.net コアテスト プロジェクトで DateTime.Now を偽造したいとします。
.net 4.5 には、MSFakes (Moles)、Smocks などがあります。いずれも dotnet コア フレームワークをまだサポートしていません。Shim はまだ dotnet コアに移植されていません。
現時点で .NET Core の私の目標を達成する分離フレームワークまたは手法を知っている人はいますか?