2013-02-14 8 views
5

Visual Studio 2010のMVC4 Web APIアプリケーション内でXDocumentを使用していますが、テストの戦略については不明です。XDocument.Load()とXDocument.Save()のテスト方法

私のユニットテストのほとんどは、コントローラ、サービス、リポジトリテストに適したメモリ内のXDocumentを利用しています。

しかし、私はXDocument.Load(filename)とXDocument.Save(ファイル名)のシナリオを持っています(ユニットテストまたは統合テストでテストしたい)。

私はSO hereで次の質問\答えを見てきましたが、どのように進めるのかは分かりません。

public class PathProvider 
{ 
    public virtual string GetPath() 
    { 
     return HttpContext.Current.Server.MapPath("App_Data/policies.xml") 
    } 
} 

PathProvider pathProvider = new PathProvider(); 
XDocument xdoc = XDocument.Load(pathProvider.GetPath()); 

だから、私は何にXDocument.Load呼び出して、私は今、モック通話をすることができますことを取得する(pathProvider.GetPathを())。

そのPathProviderが動作することをテストする必要がありますか?もしそうなら、私はこれにどのようにアプローチしますか?

おかげ

デイビー

+0

' XDocument.Load'を使用して[MS Fakes](http://msdn.microsoft.com/en-us/library/hh549175.aspx)を参照してください。 –

+0

ありがとうございます、私はVS 2010を使用していると言って、アップグレードできません。私はフェイクスが2010年に動作しないと信じています。 – davy

+0

前任者[Moles]を使用することができます(http://research.microsoft.com/en-us/projects/moles/) –

答えて

2

は、私はその後PathProviderが機能することをテストしようとしているべきか?もしそうなら、私はこれにどのようにアプローチしますか?

私の答えは、少なくとも自動化されたテストでは始まっていません。

PathProviderは、提供したコードスニペットのために、ASP.NETフレームワークの周りのラッパー(アダプタ)です。私がここで頼りにする唯一のテストは、共同作業テストです。 GetPath()が呼び出されることを期待して呼び出されます。言い換えれば、文脈はここで重要です。

PathProvider pathProvider = new PathProvider(); 
XDocument xdoc = XDocument.Load(pathProvider.GetPath()); 

上記のコードは「フレームワークをテストする」ということで、私はこのようなコードを単体テストすることさえ気にしません。このコード部分がXMLファイルなどで正しいことをしたかったのを本当に確認したいのであれば、私は統合テストに落ち着くでしょう。これは遅く脆いかもしれないと考えていますが。

私のソリューションは、PathProviderの場合と同じように、ロードされるXMLドキュメントの概念を抽象化することです。ここから、手動によるテストで十分です。このようなアダプタにドメインロジックが含まれている場合は、途中でXMLやドキュメントの読み込みなどを心配することなく、単独でテストできるクラス/メソッドを抽出します。

関連する問題