5

Visual Studio 2010 の MVC4 Web API アプリケーション内で XDocument を使用していますが、テスト方法がよくわかりません。

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

ただし、XDocument.Load(filename)テストしたい XDocument.Save(filename) シナリオがあります (単体テストまたは統合テストで)。

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 が機能することをテストしようとする必要がありますか? もしそうなら、私はこれにどのようにアプローチしますか?

ありがとう

デービー

4

1 に答える 1

2

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

私の答えはノーです。少なくとも、最初から自動化されたテストではそうではありません。

あなたが提供したコード スニペットのために、PathProvider は ASP.NET フレームワークのラッパー (アダプター) です。ここで頼りにする唯一のテストはコラボレーション テストです。たとえば、期待どおりに GetPath() が呼び出されることを確認します。そうは言っても、ここではコンテキストが重要です。

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

上記のコードは「フレームワークのテスト」の匂いがするので、そのようなコードの単体テストをわざわざ行うつもりはありません。コードのこの部分が XML ファイルなどで正しく動作することを本当に確認したい場合は、統合テストにフォールバックします。ただし、これは遅くて脆いかもしれないと考えてください。

したがって、私の解決策は、PathProvider の場合と同様に、読み込まれる XML ドキュメントの概念を抽象化することです。ここからは、手動テストで十分です。途中で、そのようなアダプターにドメイン ロジックが含まれている場合は、XML やドキュメントの読み込みなどを心配する必要なく、分離してテストできるクラス/メソッドを抽出します...

于 2013-02-16T13:27:33.610 に答える