2

我有一个检测附加文件的 c# ashx 处理程序。它工作正常。

但是,我依靠第三方公司编写软件将文件发送给处理程序(长话短说)。我需要测试我的处理程序是否有效,我们和第 3 方公司之间的时差正在成为一场噩梦。

场景是第 3 方软件每 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 回答