Controller test example
this includes how to mock a request’s header - but it’s a bogus test. this only shows how to use XUnit and its structure.
public class XXXControllerTest
{
// all mocks and stubs
private Mock<IXXXService> _serviceMock;
// controller under test
private XXXController _controller;
public XXXControllerTest()
{
_serviceMock = new Mock<IXXXService>();
_controller = new XXXController(_serviceMock.Object);
}
[Fact]
public async Task CallXXX_ShouldCall_Service()
{
// ARRANGE
// mock header
var httpContext = new DefaultHttpContext();
httpContext.Request.Headers["someHeader"] = "my-mocked-value";
_controller.ControllerContext = new ControllerContext
{
HttpContext = httpContext
};
// mock request
string mockedValue = "someInputValueTo_serviceMock";
string mockedResponse = "someResponseValueFrom_serviceMock";
_serviceMock.Setup(mock => mock.SomeMethodCall(mockedValue)).ReturnsAsync(mockedResponse);
// ACT
var response = await _controller.CallSomething(mockedValue) as OkObjectResult;
// ASSERT
response.Should().NotBeNull();
response.StatusCode.Should().Be(200);
response.Value.Should().BeEquivalentTo(mockedResponse);
}
}
Basic service test example
public class XXXServiceTest
{
// all mocks and stubs
private Mock<IXXXDependency> _dependency;
// service under test
private XXXService _serviceMock;
public XXXServiceTest()
{
_dependency = new Mock<IXXXDependency>();
_serviceMock = new XXXService(_dependency.Object);
}
[Fact]
public async Task ProcessXXX_CaseXXX_ShouldReturnOkay()
{
// ARRANGE
string paramX = "something";
string responseX = "some response";
_serviceMock.Setup(mock => mock.SomeMethodCall(paramX)).ReturnsAsync(responseX);
// ACT
var result = await _service.ProcessXXX(paramX);
// ASSERT
result.status.Should().NotBeNull();
// ... assert whatever
}
}