Skip to content
This repository was archived by the owner on Dec 14, 2018. It is now read-only.

Commit 0b6932d

Browse files
committed
Quick fix: Clean up test warnings
- avoid "Skipping test case with duplicate ID" messages - xUnit gets confused when `[Theory]`s are overridden - avoid "falling back to single test case" messages - fix inspired by aspnet/SignalR#1820
1 parent 37e5629 commit 0b6932d

File tree

4 files changed

+86
-105
lines changed

4 files changed

+86
-105
lines changed

test/Microsoft.AspNetCore.Mvc.FunctionalTests/FileResultTests.cs

Lines changed: 61 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -246,17 +246,21 @@ public async Task FileFromDisk_ReturnsFileWithFileName_IfRangeHeaderInvalid_Rang
246246
Assert.Equal("This is a sample text file", body);
247247
}
248248

249+
// Use int for HttpStatusCode data because xUnit cannot serialize a GAC'd enum when running on .NET Framework.
249250
[Theory]
250-
[InlineData("", HttpStatusCode.OK, 26)]
251-
[InlineData("bytes = 0-6", HttpStatusCode.PartialContent, 7)]
252-
[InlineData("bytes = 17-25", HttpStatusCode.PartialContent, 9)]
253-
[InlineData("bytes = 0-50", HttpStatusCode.PartialContent, 26)]
254-
[InlineData("0-6", HttpStatusCode.OK, 26)]
255-
[InlineData("bytes = ", HttpStatusCode.OK, 26)]
256-
[InlineData("bytes = 1-4, 5-11", HttpStatusCode.OK, 26)]
257-
[InlineData("bytes = 35-36", HttpStatusCode.RequestedRangeNotSatisfiable, 26)]
258-
[InlineData("bytes = -0", HttpStatusCode.RequestedRangeNotSatisfiable, 26)]
259-
public async Task FileFromDisk_ReturnsFileWithFileName_DoesNotServeBody_ForHeadRequest_WithLastModifiedAndEtag(string rangeString, HttpStatusCode httpStatusCode, int expectedContentLength)
251+
[InlineData("", (int)HttpStatusCode.OK, 26)]
252+
[InlineData("bytes = 0-6", (int)HttpStatusCode.PartialContent, 7)]
253+
[InlineData("bytes = 17-25", (int)HttpStatusCode.PartialContent, 9)]
254+
[InlineData("bytes = 0-50", (int)HttpStatusCode.PartialContent, 26)]
255+
[InlineData("0-6", (int)HttpStatusCode.OK, 26)]
256+
[InlineData("bytes = ", (int)HttpStatusCode.OK, 26)]
257+
[InlineData("bytes = 1-4, 5-11", (int)HttpStatusCode.OK, 26)]
258+
[InlineData("bytes = 35-36", (int)HttpStatusCode.RequestedRangeNotSatisfiable, 26)]
259+
[InlineData("bytes = -0", (int)HttpStatusCode.RequestedRangeNotSatisfiable, 26)]
260+
public async Task FileFromDisk_ReturnsFileWithFileName_DoesNotServeBody_ForHeadRequest_WithLastModifiedAndEtag(
261+
string rangeString,
262+
int httpStatusCode,
263+
int expectedContentLength)
260264
{
261265
// Arrange
262266
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Head, "http://localhost/DownloadFiles/DownloadFromDiskWithFileName_WithLastModifiedAndEtag");
@@ -267,7 +271,7 @@ public async Task FileFromDisk_ReturnsFileWithFileName_DoesNotServeBody_ForHeadR
267271
var response = await Client.SendAsync(httpRequestMessage);
268272

269273
// Assert
270-
Assert.Equal(httpStatusCode, response.StatusCode);
274+
Assert.Equal(httpStatusCode, (int)response.StatusCode);
271275

272276
Assert.NotNull(response.Content.Headers.ContentType);
273277
Assert.Equal("text/plain", response.Content.Headers.ContentType.ToString());
@@ -442,17 +446,21 @@ public async Task FileFromStream_ReturnsFileWithFileName_IfRangeHeaderInvalid_Ra
442446
Assert.Equal("This is sample text from a stream", body);
443447
}
444448

449+
// Use int for HttpStatusCode data because xUnit cannot serialize a GAC'd enum when running on .NET Framework.
445450
[Theory]
446-
[InlineData("", HttpStatusCode.OK, 33)]
447-
[InlineData("bytes = 0-6", HttpStatusCode.PartialContent, 7)]
448-
[InlineData("bytes = 17-25", HttpStatusCode.PartialContent, 9)]
449-
[InlineData("bytes = 0-50", HttpStatusCode.PartialContent, 33)]
450-
[InlineData("0-6", HttpStatusCode.OK, 33)]
451-
[InlineData("bytes = ", HttpStatusCode.OK, 33)]
452-
[InlineData("bytes = 1-4, 5-11", HttpStatusCode.OK, 33)]
453-
[InlineData("bytes = 35-36", HttpStatusCode.RequestedRangeNotSatisfiable, 33)]
454-
[InlineData("bytes = -0", HttpStatusCode.RequestedRangeNotSatisfiable, 33)]
455-
public async Task FileFromStream_ReturnsFileWithFileName_DoesNotServeBody_ForHeadRequest(string rangeString, HttpStatusCode httpStatusCode, int expectedContentLength)
451+
[InlineData("", (int)HttpStatusCode.OK, 33)]
452+
[InlineData("bytes = 0-6", (int)HttpStatusCode.PartialContent, 7)]
453+
[InlineData("bytes = 17-25", (int)HttpStatusCode.PartialContent, 9)]
454+
[InlineData("bytes = 0-50", (int)HttpStatusCode.PartialContent, 33)]
455+
[InlineData("0-6", (int)HttpStatusCode.OK, 33)]
456+
[InlineData("bytes = ", (int)HttpStatusCode.OK, 33)]
457+
[InlineData("bytes = 1-4, 5-11", (int)HttpStatusCode.OK, 33)]
458+
[InlineData("bytes = 35-36", (int)HttpStatusCode.RequestedRangeNotSatisfiable, 33)]
459+
[InlineData("bytes = -0", (int)HttpStatusCode.RequestedRangeNotSatisfiable, 33)]
460+
public async Task FileFromStream_ReturnsFileWithFileName_DoesNotServeBody_ForHeadRequest(
461+
string rangeString,
462+
int httpStatusCode,
463+
int expectedContentLength)
456464
{
457465
// Arrange
458466
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Head, "http://localhost/DownloadFiles/DownloadFromStreamWithFileName_WithEtag");
@@ -463,7 +471,7 @@ public async Task FileFromStream_ReturnsFileWithFileName_DoesNotServeBody_ForHea
463471
var response = await Client.SendAsync(httpRequestMessage);
464472

465473
// Assert
466-
Assert.Equal(httpStatusCode, response.StatusCode);
474+
Assert.Equal(httpStatusCode, (int)response.StatusCode);
467475

468476
Assert.NotNull(response.Content.Headers.ContentType);
469477
Assert.Equal("text/plain", response.Content.Headers.ContentType.ToString());
@@ -616,7 +624,7 @@ public async Task FileFromBinaryData_ReturnsFileWithFileName_IfRangeHeaderValid(
616624
var response = await Client.SendAsync(httpRequestMessage);
617625
var body = await response.Content.ReadAsStringAsync();
618626

619-
// Assert
627+
// Assert
620628
Assert.NotNull(response.Content.Headers.ContentType);
621629
Assert.Equal("text/plain", response.Content.Headers.ContentType.ToString());
622630
Assert.NotNull(body);
@@ -643,17 +651,21 @@ public async Task FileFromBinaryData_ReturnsFileWithFileName_IfRangeHeaderInvali
643651
Assert.Equal("This is a sample text from a binary array", body);
644652
}
645653

654+
// Use int for HttpStatusCode data because xUnit cannot serialize a GAC'd enum when running on .NET Framework.
646655
[Theory]
647-
[InlineData("", HttpStatusCode.OK, 41)]
648-
[InlineData("bytes = 0-6", HttpStatusCode.PartialContent, 7)]
649-
[InlineData("bytes = 17-25", HttpStatusCode.PartialContent, 9)]
650-
[InlineData("bytes = 0-50", HttpStatusCode.PartialContent, 41)]
651-
[InlineData("0-6", HttpStatusCode.OK, 41)]
652-
[InlineData("bytes = ", HttpStatusCode.OK, 41)]
653-
[InlineData("bytes = 1-4, 5-11", HttpStatusCode.OK, 41)]
654-
[InlineData("bytes = 45-46", HttpStatusCode.RequestedRangeNotSatisfiable, 41)]
655-
[InlineData("bytes = -0", HttpStatusCode.RequestedRangeNotSatisfiable, 41)]
656-
public async Task FileFromBinaryData_ReturnsFileWithFileName_DoesNotServeBody_ForHeadRequest(string rangeString, HttpStatusCode httpStatusCode, int expectedContentLength)
656+
[InlineData("", (int)HttpStatusCode.OK, 41)]
657+
[InlineData("bytes = 0-6", (int)HttpStatusCode.PartialContent, 7)]
658+
[InlineData("bytes = 17-25", (int)HttpStatusCode.PartialContent, 9)]
659+
[InlineData("bytes = 0-50", (int)HttpStatusCode.PartialContent, 41)]
660+
[InlineData("0-6", (int)HttpStatusCode.OK, 41)]
661+
[InlineData("bytes = ", (int)HttpStatusCode.OK, 41)]
662+
[InlineData("bytes = 1-4, 5-11", (int)HttpStatusCode.OK, 41)]
663+
[InlineData("bytes = 45-46", (int)HttpStatusCode.RequestedRangeNotSatisfiable, 41)]
664+
[InlineData("bytes = -0", (int)HttpStatusCode.RequestedRangeNotSatisfiable, 41)]
665+
public async Task FileFromBinaryData_ReturnsFileWithFileName_DoesNotServeBody_ForHeadRequest(
666+
string rangeString,
667+
int httpStatusCode,
668+
int expectedContentLength)
657669
{
658670
// Arrange
659671
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Head, "http://localhost/DownloadFiles/DownloadFromBinaryDataWithFileName_WithEtag");
@@ -664,7 +676,7 @@ public async Task FileFromBinaryData_ReturnsFileWithFileName_DoesNotServeBody_Fo
664676
var response = await Client.SendAsync(httpRequestMessage);
665677

666678
// Assert
667-
Assert.Equal(httpStatusCode, response.StatusCode);
679+
Assert.Equal(httpStatusCode, (int)response.StatusCode);
668680

669681
Assert.NotNull(response.Content.Headers.ContentType);
670682
Assert.Equal("text/plain", response.Content.Headers.ContentType.ToString());
@@ -842,17 +854,21 @@ public async Task FileFromEmbeddedResources_ReturnsFileWithFileName_RangeRequest
842854
Assert.Equal("attachment; filename=downloadName.txt; filename*=UTF-8''downloadName.txt", contentDisposition);
843855
}
844856

857+
// Use int for HttpStatusCode data because xUnit cannot serialize a GAC'd enum when running on .NET Framework.
845858
[Theory]
846-
[InlineData("", HttpStatusCode.OK, 38)]
847-
[InlineData("bytes = 0-6", HttpStatusCode.PartialContent, 7)]
848-
[InlineData("bytes = 17-25", HttpStatusCode.PartialContent, 9)]
849-
[InlineData("bytes = 0-50", HttpStatusCode.PartialContent, 38)]
850-
[InlineData("0-6", HttpStatusCode.OK, 38)]
851-
[InlineData("bytes = ", HttpStatusCode.OK, 38)]
852-
[InlineData("bytes = 1-4, 5-11", HttpStatusCode.OK, 38)]
853-
[InlineData("bytes = 45-46", HttpStatusCode.RequestedRangeNotSatisfiable, 38)]
854-
[InlineData("bytes = -0", HttpStatusCode.RequestedRangeNotSatisfiable, 38)]
855-
public async Task FileFromEmbeddedResources_ReturnsFileWithFileName_DoesNotServeBody_ForHeadRequest(string rangeString, HttpStatusCode httpStatusCode, int expectedContentLength)
859+
[InlineData("", (int)HttpStatusCode.OK, 38)]
860+
[InlineData("bytes = 0-6", (int)HttpStatusCode.PartialContent, 7)]
861+
[InlineData("bytes = 17-25", (int)HttpStatusCode.PartialContent, 9)]
862+
[InlineData("bytes = 0-50", (int)HttpStatusCode.PartialContent, 38)]
863+
[InlineData("0-6", (int)HttpStatusCode.OK, 38)]
864+
[InlineData("bytes = ", (int)HttpStatusCode.OK, 38)]
865+
[InlineData("bytes = 1-4, 5-11", (int)HttpStatusCode.OK, 38)]
866+
[InlineData("bytes = 45-46", (int)HttpStatusCode.RequestedRangeNotSatisfiable, 38)]
867+
[InlineData("bytes = -0", (int)HttpStatusCode.RequestedRangeNotSatisfiable, 38)]
868+
public async Task FileFromEmbeddedResources_ReturnsFileWithFileName_DoesNotServeBody_ForHeadRequest(
869+
string rangeString,
870+
int httpStatusCode,
871+
int expectedContentLength)
856872
{
857873
// Arrange
858874
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Head, "http://localhost/EmbeddedFiles/DownloadFileWithFileName");
@@ -863,7 +879,7 @@ public async Task FileFromEmbeddedResources_ReturnsFileWithFileName_DoesNotServe
863879
var response = await Client.SendAsync(httpRequestMessage);
864880

865881
// Assert
866-
Assert.Equal(httpStatusCode, response.StatusCode);
882+
Assert.Equal(httpStatusCode, (int)response.StatusCode);
867883

868884
Assert.NotNull(response.Content.Headers.ContentType);
869885
Assert.Equal("text/plain", response.Content.Headers.ContentType.ToString());

test/Microsoft.AspNetCore.Mvc.FunctionalTests/RoutingEndpointRoutingTest.cs

Lines changed: 6 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -263,53 +263,6 @@ public override async Task ConventionalRoutedController_InArea_ActionBlockedByHt
263263
Assert.Equal(HttpStatusCode.MethodNotAllowed, response.StatusCode);
264264
}
265265

266-
[Theory]
267-
[MemberData(nameof(AttributeRoutedAction_MultipleRouteAttributes_WithMultipleHttpAttributes_RespectsConstraintsData))]
268-
public override async Task AttributeRoutedAction_MultipleRouteAttributes_WithMultipleHttpAttributes_RespectsConstraints(
269-
string url,
270-
string method)
271-
{
272-
// Arrange
273-
var expectedUrl = new Uri(url).AbsolutePath;
274-
275-
// Act
276-
var response = await Client.SendAsync(new HttpRequestMessage(new HttpMethod(method), url));
277-
278-
// Assert
279-
Assert.Equal(HttpStatusCode.MethodNotAllowed, response.StatusCode);
280-
}
281-
282-
// Endpoint routing exposes HTTP 405s for HTTP method mismatches
283-
[Theory]
284-
[MemberData(nameof(AttributeRoutedAction_RejectsRequestsWithWrongMethods_InRoutesWithoutExtraTemplateSegmentsOnTheActionData))]
285-
public override async Task AttributeRoutedAction_RejectsRequestsWithWrongMethods_InRoutesWithoutExtraTemplateSegmentsOnTheAction(
286-
string method,
287-
string url)
288-
{
289-
// Arrange
290-
var request = new HttpRequestMessage(new HttpMethod(method), $"http://localhost{url}");
291-
292-
// Assert
293-
var response = await Client.SendAsync(request);
294-
295-
// Assert
296-
Assert.Equal(HttpStatusCode.MethodNotAllowed, response.StatusCode);
297-
}
298-
299-
[Theory]
300-
[MemberData(nameof(AttributeRouting_MixedAcceptVerbsAndRoute_UnreachableData))]
301-
public override async Task AttributeRouting_MixedAcceptVerbsAndRoute_Unreachable(string path, string verb)
302-
{
303-
// Arrange
304-
var request = new HttpRequestMessage(new HttpMethod(verb), "http://localhost" + path);
305-
306-
// Act
307-
var response = await Client.SendAsync(request);
308-
309-
// Assert
310-
Assert.Equal(HttpStatusCode.MethodNotAllowed, response.StatusCode);
311-
}
312-
313266
[Fact]
314267
public async Task ConventionalRoutedAction_ParameterTransformer()
315268
{
@@ -423,5 +376,11 @@ public async Task ConventionalRoutedAction_ParameterTransformer_LinkToSelf()
423376
Assert.Equal("Index", result.Action);
424377
Assert.Equal("/ConventionalTransformerRoute/conventional-transformer", result.Link);
425378
}
379+
380+
// Endpoint routing exposes HTTP 405s for HTTP method mismatches.
381+
protected override void AssertCorsRejectionStatusCode(HttpResponseMessage response)
382+
{
383+
Assert.Equal(HttpStatusCode.MethodNotAllowed, response.StatusCode);
384+
}
426385
}
427386
}

test/Microsoft.AspNetCore.Mvc.FunctionalTests/RoutingTestsBase.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using System.Net.Http;
99
using System.Threading.Tasks;
1010
using Microsoft.AspNetCore.Hosting;
11-
using Microsoft.AspNetCore.Routing;
1211
using Newtonsoft.Json;
1312
using Xunit;
1413

@@ -362,7 +361,7 @@ public virtual async Task AttributeRoutedAction_RejectsRequestsWithWrongMethods_
362361
var response = await Client.SendAsync(request);
363362

364363
// Assert
365-
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
364+
AssertCorsRejectionStatusCode(response);
366365
}
367366

368367
[Theory]
@@ -514,7 +513,7 @@ public virtual async Task AttributeRoutedAction_MultipleRouteAttributes_WithMult
514513
var response = await Client.SendAsync(new HttpRequestMessage(new HttpMethod(method), url));
515514

516515
// Assert
517-
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
516+
AssertCorsRejectionStatusCode(response);
518517
}
519518

520519
// The url would be /Store/ListProducts with conventional routes
@@ -1295,7 +1294,7 @@ public virtual async Task AttributeRoutedAction_InArea_ExplicitLeaveArea()
12951294
Assert.Equal("/", result.Link);
12961295
}
12971296

1298-
1297+
12991298

13001299
[Fact]
13011300
public virtual async Task AttributeRoutedAction_InArea_LinkToConventionalRoutedActionInArea()
@@ -1431,7 +1430,7 @@ public virtual async Task AttributeRouting_MixedAcceptVerbsAndRoute_Unreachable(
14311430
var response = await Client.SendAsync(request);
14321431

14331432
// Assert
1434-
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
1433+
AssertCorsRejectionStatusCode(response);
14351434
}
14361435

14371436
[Theory]
@@ -1475,5 +1474,10 @@ protected static LinkBuilder LinkFrom(string url)
14751474
{
14761475
return new LinkBuilder(url);
14771476
}
1477+
1478+
protected virtual void AssertCorsRejectionStatusCode(HttpResponseMessage response)
1479+
{
1480+
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
1481+
}
14781482
}
14791483
}

test/Microsoft.AspNetCore.Mvc.FunctionalTests/WebApiCompatShimBasicTest.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -358,10 +358,11 @@ public async Task ApiController_CreateResponse_HardcodedFormatter()
358358
Assert.Equal("text/json", response.Content.Headers.ContentType.MediaType);
359359
}
360360

361+
// Use int for HttpStatusCode data because xUnit cannot serialize a GAC'd enum when running on .NET Framework.
361362
[Theory]
362-
[InlineData("http://localhost/Mvc/Index", HttpStatusCode.OK)]
363-
[InlineData("http://localhost/api/Blog/Mvc/Index", HttpStatusCode.NotFound)]
364-
public async Task WebApiRouting_AccessMvcController(string url, HttpStatusCode expected)
363+
[InlineData("http://localhost/Mvc/Index", (int)HttpStatusCode.OK)]
364+
[InlineData("http://localhost/api/Blog/Mvc/Index", (int)HttpStatusCode.NotFound)]
365+
public async Task WebApiRouting_AccessMvcController(string url, int expected)
365366
{
366367
// Arrange
367368
var request = new HttpRequestMessage(HttpMethod.Get, url);
@@ -370,13 +371,14 @@ public async Task WebApiRouting_AccessMvcController(string url, HttpStatusCode e
370371
var response = await Client.SendAsync(request);
371372

372373
// Assert
373-
Assert.Equal(expected, response.StatusCode);
374+
Assert.Equal(expected, (int)response.StatusCode);
374375
}
375376

377+
// Use int for HttpStatusCode data because xUnit cannot serialize a GAC'd enum when running on .NET Framework.
376378
[Theory]
377-
[InlineData("http://localhost/BasicApi/GenerateUrl", HttpStatusCode.NotFound)]
378-
[InlineData("http://localhost/api/Blog/BasicApi/GenerateUrl", HttpStatusCode.OK)]
379-
public async Task WebApiRouting_AccessWebApiController(string url, HttpStatusCode expected)
379+
[InlineData("http://localhost/BasicApi/GenerateUrl", (int)HttpStatusCode.NotFound)]
380+
[InlineData("http://localhost/api/Blog/BasicApi/GenerateUrl", (int)HttpStatusCode.OK)]
381+
public async Task WebApiRouting_AccessWebApiController(string url, int expected)
380382
{
381383
// Arrange
382384
var request = new HttpRequestMessage(HttpMethod.Get, url);
@@ -385,7 +387,7 @@ public async Task WebApiRouting_AccessWebApiController(string url, HttpStatusCod
385387
var response = await Client.SendAsync(request);
386388

387389
// Assert
388-
Assert.Equal(expected, response.StatusCode);
390+
Assert.Equal(expected, (int)response.StatusCode);
389391
}
390392

391393
[Fact]

0 commit comments

Comments
 (0)