Microsoft Fakesは比較的新しいフレームワークであり、私もこの質問のすべての側面に比較的慣れていないため、詳細な回答が必要です。
私はアプリケーションの「ユニットテスト」のタスクを与えられました。これをレガシーアプリケーションと呼びます(Michael Feathersの定義による)。特にMicrosoftFakesフレームワークを使用します。私のマネージャーがFakesを提案する理由は、外部の依存関係とAPIに関する単体テストを許可する機能、特にデータベースの依存関係を削除できることです。
私はVB.net、一般的な.NETフレームワーク、および一般的な単体テストのバックグラウンドが弱いことを考えると、このタスクはやや圧倒されます。とにかく、SHIMSを使用してこれらの内部クラスの依存関係の一部を迂回する方法についての洞察が必要です。私がSHIMSと、より高速で実装が簡単なSTUBSに興味を持っている理由は、このアプリケーションにはインターフェイスがなく(私が比較的慣れていないもの)、STUBにはインターフェイスが必要だからです。
さて、この背景を踏まえたより具体的な質問については、クラス、たとえば「文字列名」とタイプ「アドレスアドレス」で構成され、これらをコンストラクタパラメータとして使用するクラスPersonの単体テストを試みる手助けをしたいと思います。次に、クラスAddressが、パラメーター「string streetNumber」、「string street」、および独自のパラメーターを持つユーザータイプ「stateState」で構成されている場合があります。
public class Person()
Private mName As String
Private mAddr As myclass.Address
Public Sub New(ByVal name As string, ByVal addr As Address)
mName = name
mAddr = addr
End Sub
そして他の場所...
public class Address()
Private mStreet As String
Private mState As myclass.State
Public Sub New(ByVal street As String, ByVal state As State)
mStreet = street
mState = state
End Sub
そして、それに含まれるプロパティとメソッドが何であれ、状態が存在します。
したがって、クラスPersonをこれらの他のクラス(アドレス、状態)から分離するための単体テストを構築する方法を知りたいので、それらが開発中または変更された場合でも、Personの単体テストは合格します...提案???
現在、カップリングの問題はないようですが、偽物の性質について混乱しています。スタブは、拡張または実装できるすべてのタイプで使用できます。シムは実装の詳細に密接に関係しているため、利用可能な場合はシムよりも優先する必要があります。
Addressでは、おそらくStubStateを渡し、PersonにStubAddressを渡します。一般的なTDDの慣例では、テストを作成する前に外部コードを必要としないように、StateとAddressをインターフェイスにする必要がありますが、これほど単純な型(おそらく構造体である可能性がありますか? VBをよく知っています。)
あなたの目標はばかげたテストであるべきです。1つのことだけをテストするテスト。あなたはすでにDIを行っているので、あなたの場合、スタブはそれを管理するのに十分なはずです。
シムの主な用途は、依存関係を取得できないレガシーコードです。それはそれらが良いことを意味するわけではありません、しかし時々それらはあなたが必要とするものです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加