Reputation: 3401
I am new in XUnit
tests for Web API application. I am trying to make assertion of my response value with the status code 404, but I am not sure how to do so.
Here's my test code.
Assume the input is null, the test is expected to return NotFound or 404 status code.
[Fact]
public async Task getBooksById_NullInput_Notfound()
{
//Arrange
var mockConfig = new Mock<IConfiguration>();
var controller = new BookController(mockConfig.Object);
//Act
var response = await controller.GetBooksById(null);
//Assert
mockConfig.VerifyAll();
Assert(response.StatusCode, HttpStatusCode.NotFound()); //How to achieve this?
}
In the last line of this test method, I am not able to make response.StatusCode
compile as in the response variable does not have StatusCode
property. And there is no HttpStatusCode
class that I can call...
Here's my GetBooksByID()
method in the controller class.
public class BookController : Controller
{
private RepositoryFactory _repositoryFactory = new RepositoryFactory();
private IConfiguration _configuration;
public BookController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet]
[Route("api/v1/Books/{id}")]
public async Task<IActionResult> GetBooksById(string id)
{
try
{
if (string.IsNullOrEmpty(id))
{
return BadRequest();
}
var response = //bla
//do something
if (response == null)
{
return NotFound();
}
return new ObjectResult(response);
}
catch (Exception e)
{
throw;
}
}
Thanks!
Upvotes: 6
Views: 20140
Reputation: 3437
Assert.Equal(System.Net.HttpStatusCode.Unauthorized, response.StatusCode);
Upvotes: 3
Reputation: 412
Old question, but while the accepted answer is valid it pulls in another dependency that's helpful but not required to do this. The most straight forward approach is to reference:
using Microsoft.AspNetCore.Mvc;
Then test with:
Assert.IsAssignableFrom<NotFoundObjectResult>(response.Result);
assuming your method returns an ActionResult.
Upvotes: 2
Reputation: 32455
You can check against returned type
// Act
var actualResult = await controller.GetBooksById(null);
// Assert
actualResult.Should().BeOfType<BadRequestResult>();
Should()
and .BeOfType<T>
are methods from FluentAssertions library, which available on Nuget
Upvotes: 7
Reputation: 3401
After getting hints by @Brad, the code compiles and passed the test.
response.ToString().Equals(HttpStatusCode.NotFound);
Upvotes: -1