1

単体テストを記述しようとしている ASP.NET Web サービスがあります。テストする必要があることの 1 つは、Web サービスから生成された WSDL ファイルが特定の基準に一致することです。しかし、Web サービスに対して実際に HTTP 要求を実行しないと、WSDL ファイルを取得する方法がわかりません。

私がやりたいことは、次のようなものです(疑似コード):

using System.Web;
using System.Web.Services;

[WebService]    
class MyWebService : System.Web.Services.WebService
{
    [WebMethod]
    string PopNextItem()
    {
        // Retrieve a string from the database and then delete that record.
    }
}

(をちょきちょきと切る)

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
class WebServiceTest
{
    bool CheckWSDLMeetsCriteria(string WSDL)
    {
        bool success = true;
        // Check file here
        return success;
    }

    [TestMethod]
    void WSDL_Should_Match_Criteria()
    {
        string generatedWSDL = getWSDL(MyWebService.PopNextItem);
        Assert.IsTrue(CheckWSDLMeetsCriteria(generatedWSDL));
    }
}

もちろん、getWSDLメソッドはありません。また、どのように記述すればよいかわかりません。テストから wsdl.exe を呼び出して出力ファイルを取得できると思いますが、もっと良い方法があることを願っています。.NET では、WSDL ファイルをプログラムで生成する方法はありますか?

それができない場合は、IIS への HTTP 要求を使用して WSDL ファイルを取得できると思います。問題は、単体テストがローカル マシンで実行されている場合、IIS のローカル インスタンスが実行されていない可能性が高いことです。ステージング サーバーなどから WSDL ファイルを取得しようとすると、古いバージョンのサービス (ステージング サーバーが更新されてからローカル マシンの Web サービス コードが変更された可能性があります) に対してテストが行​​われる可能性があります。インターネットにアクセスできず、テストできません。

他の人がどのソリューションを推奨するのか興味があります。どう思いますか?

4

1 に答える 1

1

これまでに実装できる 2 つのオプションを見つけました。

A. ServiceDescriptionReflector を使用して WSDL ファイルを生成します。【ソース

ServiceDescriptionReflector reflector = new ServiceDescriptionReflector(); 
reflector.Reflect(typeof(MyService), "http://localhost/vdir/Foo.asmx");

if (reflector.ServiceDescriptions.Count > 1){
  throw new Exception("Deal with multiple service descriptions later");
}

XmlTextWriter wtr = new XmlTextWriter(Console.Out); 
wtr.Formatting = Formatting.Indented; 
reflector.ServiceDescriptions[0].Write(wtr); 
wtr.Close();

B. Svcutil.exe を使用して、コンパイルされたサービス コードからメタデータをエクスポートする[ソース]

于 2013-10-02T19:17:04.353 に答える