2

添付されたファイルを検出するc#ashxハンドラーがあります。正常に動作します。

しかし、私はサードパーティの会社に依存して、ハンドラーにファイルを送信するソフトウェアを作成しています(長い話)。ハンドラーが機能することをテストする必要があります。私たちとサードパーティ企業との時差は悪夢になりつつあります。

シナリオは、サードパーティのソフトウェアが30秒ごとにファイルをハンドラーに送信することです。これをテストする必要があります。愚かなことを言わずに、stackoverflowに質問すると思いました:)

テストユニットなどを使用してashxハンドラーをテストしたいのですが、どこから始めればよいのかわかりません。「handler.ashx?filename = 12345.csv」と入力すると便利ですが、実際のファイルは添付されていません。

どんな提案も素晴らしいでしょう。

4

2 に答える 2

4

私の理解では、ファイルをアップロードできるashxハンドラーがあり、それをテストしたいと考えています。

ファイルの添付ファイルにPOSTリクエストを使用するashxハンドラーを想定したサンプルテストを添付しました。

[TestMethod]
public void TestCallUploadHandler()
{
    const string FILE_PATH = "C:\\foo.txt";
    const string FILE_NAME = "foo.txt";
    string UPLOADER_URI =
        string.Format("http://www.foobar.com/handler.ashx?filename={0}", FILE_NAME);

    using (var stream = File.OpenRead(FILE_PATH))
    {
        var httpRequest = WebRequest.Create(UPLOADER_URI) as HttpWebRequest;
        httpRequest.Method = "POST";
        stream.Seek(0, SeekOrigin.Begin);
        stream.CopyTo(httpRequest.GetRequestStream());

        var httpResponse = httpRequest.GetResponse();
        StreamReader reader = new StreamReader(httpResponse.GetResponseStream());
        var responseString = reader.ReadToEnd();

        //Check the responsestring and see if all is ok
    }
}

基本的には、 POST用のWebRequestを作成し、ファイルストリームをその要求に添付し、ファイル名をそのクエリ文字列に添付します。

于 2012-08-14T15:32:15.250 に答える
0

私の質問に答えるために、そして@parapuraに感謝します:

[TestMethod]
public void TestCallUploadHandler()
{
    const string FILE_PATH = "C:\\foo.txt";
    const string FILE_NAME = "foo.txt";
    string UPLOADER_URI = string.Format("http://www.foobar.com/handler.ashx?filename={0}", FILE_NAME);

    using (var stream = File.OpenRead(FILE_PATH))
    {
        var httpRequest = WebRequest.Create(UPLOADER_URI) as HttpWebRequest;
        httpRequest.Method = "POST";
        NetworkCredential networkCredential = new NetworkCredential("username", "pwd"); 
        httpRequest.Credentials = networkCredential;
        stream.Seek(0, SeekOrigin.Begin);
        stream.CopyTo(httpRequest.GetRequestStream());

        byte[] authBytes = Encoding.UTF8.GetBytes("username:pwd".ToCharArray());
        httpRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(authBytes);

        var httpResponse = httpRequest.GetResponse();
        StreamReader reader = new StreamReader(httpResponse.GetResponseStream());
        var responseString = reader.ReadToEnd();

        //Check the responsestring and see if all is ok
    }
}
于 2012-08-14T16:44:05.097 に答える