2012-02-01 13 views
0

ASP.NET Webサービスにログインできるかどうかをテストするユニットテストを作成しました。 Webサービスはうまく動作し、ログイン処理さえします。私は、Visual Studioを通じて自分のWebサービスを実行しているユニットテストでasp.net Webサービスに接続中に例外がスローされる

The URL specified ('http://www.foo.com/') does not correspond to a valid directory. Tests configured to run in ASP.NET in IIS require a valid directory to exist for the URL.

、プロジェクトはまだ開発中ですので、:それは私にエラーを与えている私のテストを通じて、それに接続しようとしてしかし

これは私のテストコードです:事前に

[TestMethod()] 
     [HostType("ASP.NET")] 
     [UrlToTest("http://www.foo.com/")] 
     public void Login_Test_It_Fails_If_GUID_IS_Wrong() 
     { 
      //Arrange 
      Service service = new Service(); 
      string pGUID = string.Empty; 
      string connectionSQL = @"XXXXXXXXXX"; 
      bool targetOutput = false; 

      //Act 
      targetOutput = service.Login(pGUID, connectionSQL); 

      //Assert 
      Assert.IsFalse(targetOutput); 
     } 

感謝。

+2

Webサービスに接続している場合は単体テストではなく、統合テストです。 Loginメソッドのロジックをテストするだけの場合は、サービスをインスタンス化せずにそのクラスをテストして、そのクラスを(サービスに注入できる)別のクラスに抽出する必要があります。 – Aidan

+0

ユニットテストは本当に統合テストを行うべきですか? – Stefan

+0

はい、そうではありません、私はユニットテスト/統合テストにはまったく新しいです、実際これは私の最初の実験です。私は実際にテストケースを実装したことはありませんが、この理論に精通しています。しかし、これが統合テストであるとしましょう。なぜそれは働いていないのですか? – Jonny

答えて

0

統合テストここでは、アプリケーションが外部依存関係と通信できることをテストしています。

ユニットテストをしたい場合は、別のアプローチを試してみるとよいでしょう。

  1. ウェブサービスが管理しているサービスの場合は、サービス自体のログイン認証ロジックを確認するテストを作成できます。

  2. サービスの応答を受け取ったときにアプリケーションが正しい動作を示すように、サービスの模擬に基づいて単体テストを書くことができます。

サービスに使用する接続文字列を渡すことは、貧弱なデザインのようです。呼び出し元のアプリケーションは、サービスが使用するデータベースを知る必要があるのはなぜですか?

+0

ええと...その後、統合テストの詳細を見ていきます。接続文字列については、このデザインを見たときに最初に述べたことですが、複数のデータベースがある場合にクライアントが接続できるデータベースを制御することができます。 (ロングストーリーショート) – Jonny

0

ASP.NETでテストを実行するには、ASP.NETページを解決してページがLoadイベントまで正しく実行される必要があります。
テストメソッドは、ページロードイベントによって呼び出されます。したがって、空白のaspxページを作成し、それをフックするUrlToTest属性を設定することができます。