I'm trying to write some tests to some of our controllers. To keep it simple I'll use a simple class as example.
Imagine that I've a controller that returns an json object on success using Json function inherited from Controller
[ApiController]
[Route("[controller]")]
public class ExampleController:Controller
{
[HttpGet]
public async Task<IActionResult> Get()
{
return await Task.FromResult(new OkObjectResult(new {Message="Success"}));
}
[HttpGet("json")]
public async Task<IActionResult> GetJson()
{
return await Task.FromResult(Json(new { Message = "Success" }));
}
}
Then I have the following test methods:
[TestMethod]
public void TestOkResult()
{
var services = new ServiceCollection();
services.AddScoped<ExampleController>();
var controller = services.BuildServiceProvider().GetRequiredService<ExampleController>();
var result = controller.Get().Result;
var parsedResult = result as OkObjectResult;
Assert.IsInstanceOfType<OkObjectResult>(result);
Assert.AreEqual(200, parsedResult?.StatusCode ?? 500);
}
[TestMethod]
public void TestJsonResult()
{
var services = new ServiceCollection();
services.AddScoped<ExampleController>();
var controller = services.BuildServiceProvider().GetRequiredService<ExampleController>();
var result = controller.GetJson().Result;
var parsedResult = result as JsonResult;
Assert.IsInstanceOfType<JsonResult>(result);
Assert.AreEqual(200, parsedResult?.StatusCode ?? 500);
}
The method TestJsonResult can't assert the status code, because it's always null
Any ideas?