2012-01-30 15 views
5

今日、ASP.NETプロジェクトに対していくつかの単体テストを書くのに数時間を費やしました。 Visual Studio 2010です。ASP.NETユニットテストWindows7/IIS7

IIS7でWindows 7 Enterpriseを使用しています。私がいたかかった

ステップ:

  1. は解決
  2. に新しいテストプロジェクトを追加しました右は、クラスファイル内でクリックされたウェブサイト(Member.vb)
  3. の一環として、クラスファイルをオープン"ユニットテストを生成する"
  4. スタブを生成するメソッドを選択し、テストプロジェクトに追加するかどうかを選択してOKをクリックします。
  5. テストプロジェクトで生成されたMemberTest.vbファイルを開き、 g eneratedテスト、それが正常に動作しますIIS6マシンと私ののWindows XP Professionalの上でこれらの正確な手順を以下の場合は、「海流コンテキストで実行テスト」

をクリックします。

しかしIIS7のWindows 7 Enterpriseマシン上で私が取得:

は、指定されたURL( 'のhttp:// localhostの/ MyProjectと')は は有効なディレクトリに対応していません。 IISでASP.NETで実行するように構成されたテストでは、URLに有効なディレクトリが存在する必要があります。 URLは であるか、有効なWebアプリケーションを指していない可能性があります。

これで何が起こっているのですか、私はhttp://localhost/MyProjectにアクセスでき、完全に表示されることを確認できます。

私はWindows/IISで何らかの設定が行方不明になっていると思いますが、本当に迷っています。

<TestMethod(), _ 
HostType("ASP.NET"), _ 
UrlToTest("http://localhost/MyProject")> _ 
Public Sub MyMethodTest() 
    Dim target As Member_Accessor = New Member_Accessor() ' TODO: Initialize to an appropriate value 
    Dim CurrentVal As Short = 0 ' TODO: Initialize to an appropriate value 
    Dim expected As Short = 0 ' TODO: Initialize to an appropriate value 
    Dim actual As Short 
    actual = target.MyMethod(CurrentVal) 
    Assert.AreEqual(expected, actual) 
    Assert.Inconclusive("Verify the correctness of this test method.") 
End Sub 

ASP.NET Forumsでクロスポスト)

答えて

1

あなたは「仮想ディレクトリの作成」をクリックし、プロジェクトのプロパティで「使用IIS」を有効にする必要があり:試験方法を生成

。 IIS Expressがインストールされていますか?

+0

IIS Expressではなく、Windows 7 Enterpriseに完全IISがインストールされています。私は単体テストプロジェクトのプロジェクトプロパティのすべてのページを見てきましたが、 "Use IIS"というオプションが表示されません。このオプションはどこですか? – bgs264

+0

Webプロジェクトのプロパティ:Web - > Serverセクション - > Use Local IIS Server – Mharlin

+0

ありがとうございます - これは正しく設定されており、Webプロジェクトは既にうまく動作しています。 – bgs264

3

これまでに単体テストを行っていない場合は、クラスの機能を可能な限りきれいにテストすることから始めてください。 Webコンテキストに依存せずに個別にテストできる小さな部分に機能を分けてください。

What is unit testing ここでのアイデアのため、この質問を見てくださいます。また、このBlogで見ることができMSDN Magazine article about testing です。例ではNUnitを使用していますが、MSTestを使用している場合はプリンシパルは同じです。

私はまた、メンバークラスは、Webコンテキストへの依存関係を持っていない場合は、IISを必要としない代わりに、ちょうどこのような何かを行うことができます場合はロイOsherovesブックにArt of unit testing

をお勧めすることができます:

<TestMethod()> _ 
Public Sub MyMethodTest() 
    Dim target = New Member() 
    Dim CurrentVal As Short = 0 ' TODO: Initialize to an appropriate value 
    Dim expected As Short = 0 ' TODO: Initialize to an appropriate value 
    Dim actual As Short 
    actual = member.MyMethod(CurrentVal) 
    Assert.AreEqual(expected, actual) 
End Sub 
+0

ポイントありがとうございますが、これは質問に答えません。私はすでに、あるクラスのメソッドを1つだけテストしようとしています。ただし、すべてのクラスはWebプロジェクトの一部であり、別のクラスライブラリではなく、変更することはできません。 – bgs264

+0

別のクラスに分割する必要はありません。重要な点は、Member.vbクラスのみを単体テストでき、Webコンテキストに依存しない場合はメンバーであり、IISを起動する必要はないということです。 – Mharlin

+0

私は理解していますが、メンバーはウェブサイトプロジェクトのコンテキスト内で定義されています(ウェブサイトのApp_Code内)。テストクラスの範囲内ではありません。私は自分のアーキテクチャを変更したくありません。 Windows 7/IIS7マシンをWindows XP/IIS6のセットアップと同じように動作させたいだけです。申し訳ありませんが、それは私の質問は何ですか: – bgs264

4

これは権限の問題である可能性があります。

デフォルトのディレクトリ(C:¥users¥¥Documents¥Visual Studio 2010¥Projects)を使用している場合、アプリIDプールには権限がありません。あなたはC:\ websのようなものでプロジェクトを作成して、アプリケーションプールIDにそのフォルダに対するアクセス権があることを確認する必要があります。

Rick Andersonのブログ記事http://blogs.msdn.com/b/rickandy/archive/2011/04/22/test-you-asp-net-mvc-or-webforms-application-on-iis-7-in-30-seconds.aspxを参照してください。それが役立つかどうかをご覧ください。

+0

ありがとう、それはc:\ projectsにありました - 私はアプリケーションプールIDのアクセス許可を追加する方法を見つけることができませんでしたが、私が行ったことは、アプリケーションプールが 'ネットワークサービス'に使用した識別情報と、このアカウントのアクセス許可をフォルダに追加しました。それは何の違いもなかった、それはまだ同じエラーだった。 – bgs264

+0

ここでは、IISでAppPoolIdentityを設定する方法の詳細についてのリンクがあります(フォルダのアクセス許可を与えるには、「セキュアリソース」セクションを参照してください)。[アプリケーションプールID](http://learn.iis.net /page.aspx/624/application-pool-identities/)。 – timamm

+0

引用されたリンク時間を使用して、appPoolの機密性を付与します。アプリケーションプールIDはネットワークサービスよりも安全です。 – RickAndMSFT

3

今日も同じ問題が発生しました。いくつかの調査の後、私はthis threadが私のイベントログをチェックすることを提案しました。問題を解決したと思われthis blog postに私を導く

(QTAgent32.exe, PID 12348, Thread 61) WebSites.GetWebServer: failed to 
create AspNetHelper: 
Microsoft.VisualStudio.Enterprise.Common.AspNetHelperException: The 
website metabase contains unexpected information or you do not have 
permission to access the metabase. You must be a member of the 
Administrators group on the local computer to access the IIS metabase. 
Therefore, you cannot create or open a local IIS Web site. If you 
have Read, Write, and Modify Permissions for the folder where the 
files are located, you can create a file system web site that points 
to the folder in order to proceed. ---> 
System.Runtime.InteropServices.COMException: Unknown error 
(0x80005000) 

:それを行う際に、私は次のような数多くのエラーを発見しました。

「Windowsの機能を有効または無効にする」に進み、IIS 6の管理互換性と4つのサブコンポーネントを追加するだけでした。私はWindows認証オプションを持っていないWindows 7 Home Premiumを実行していますが、それは問題ではないようです。それを打ち、それがあなたのために問題を解決するかどうかを見てください。

関連する問題