【问题标题】:How do I use XUnit `InlineData` so that I can insert multiple test data for MultipartFormDataContent?如何使用 XUnit `InlineData` 以便为 MultipartFormDataContent 插入多个测试数据?
【发布时间】:2021-12-24 09:29:41
【问题描述】:

我有这个工作的 Xunit 代码。

    [Fact]
    public async Task When_DocumentTypeInvalidFileType_Then_ShouldFail()
    {
        using (var client = new HttpClient())
        {
            var filePath = @"D:\Files\test.pdf";

            using (var stream = File.OpenRead(filePath))
            {
                using (var form = new MultipartFormDataContent())
                {                
                    form.Add(new StringContent(Guid.NewGuid().ToString()), "Id");

                    var file = new StreamContent(stream);

                    file.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
                    form.Add(file, "File", Path.GetFileName(filePath));

                    // Act                
                    var response = await client.PostAsync("/ABC/Document", form);

                    var responseString = await response.Content.ReadAsStringAsync();
                    _output.WriteLine("response: {0}", responseString);

                    HttpStatusCode statusCode = response.StatusCode;
                    Assert.Equal(HttpStatusCode.BadRequest, statusCode);

                    var result = JsonConvert.DeserializeObject<ResponseMessage>(responseString);
                    Assert.Equal("Invalid file type.", result.file[0]);
                }
            }
        }

但上述仅测试一种情况。如何使用 XUnit InlineData 以便为 MultipartFormDataContent 插入多个测试数据?

【问题讨论】:

    标签: c# xunit


    【解决方案1】:
    [Theory]
    [InlineData(MediaTypeNames.Application.Pdf, @"D:\Files\test.pdf")]
    [InlineData(MediaTypeNames.Application.Xml, @"D:\Files\test.xml")]
    // else files what you need
    public async Task When_DocumentTypeInvalidFileType_Then_ShouldFail(string contentType, string filePath)
    {
        using (var client = new HttpClient())
        {
            using (var stream = File.OpenRead(filePath))
            {
                using (var form = new MultipartFormDataContent())
                {
                    form.Add(new StringContent(Guid.NewGuid().ToString()), "Id");
    
                    var file = new StreamContent(stream);
    
                    file.Headers.ContentType = new MediaTypeHeaderValue(contentType);
                    form.Add(file, "File", Path.GetFileName(filePath));
    
                    // Act                
                    var response = await client.PostAsync("/ABC/Document", form);
    
                    var responseString = await response.Content.ReadAsStringAsync();
                    _output.WriteLine("response: {0}", responseString);
    
                    HttpStatusCode statusCode = response.StatusCode;
                    Assert.Equal(HttpStatusCode.BadRequest, statusCode);
    
                    var result = JsonConvert.DeserializeObject<ResponseMessage>(responseString);
                    Assert.Equal("Invalid file type.", result.file[0]);
                }
            }
        }
    }
    

    [Theory]
    [MemberData(nameof(TestGenerator.GetTestData), MemberType = typeof(TestGenerator))]
    public async Task When_DocumentTypeInvalidFileType_Then_ShouldFail(string contentType, string filePath)
    {
        using (var client = new HttpClient())
        {
            using (var stream = File.OpenRead(filePath))
            {
                using (var form = new MultipartFormDataContent())
                {
                    form.Add(new StringContent(Guid.NewGuid().ToString()), "Id");
    
                    var file = new StreamContent(stream);
    
                    file.Headers.ContentType = new MediaTypeHeaderValue(contentType);
                    form.Add(file, "File", Path.GetFileName(filePath));
    
                    // Act                
                    var response = await client.PostAsync("/ABC/Document", form);
    
                    var responseString = await response.Content.ReadAsStringAsync();
                    _output.WriteLine("response: {0}", responseString);
    
                    HttpStatusCode statusCode = response.StatusCode;
                    Assert.Equal(HttpStatusCode.BadRequest, statusCode);
    
                    var result = JsonConvert.DeserializeObject<ResponseMessage>(responseString);
                    Assert.Equal("Invalid file type.", result.file[0]);
                }
            }
        }
    }
    
    class TestGenerator
    {
        public static IEnumerable<object[]> GetTestData() => new List<object[]>
        {
            new object[] { MediaTypeNames.Application.Pdf, @"D:\Files\test.pdf" },
            new object[] { MediaTypeNames.Application.Xml, @"D:\Files\test.xml" }
        };
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多