Класс контроллера
[Route("hollywood/[controller]")]
[ApiController]
public class MoviesController : Controller
{
List<Film> film = new List<Film>()
{
new Film(){id=1,name="The Dark Knight",director="Christopher Nolan", release=2008},
new Film(){id=2,name="300",director="Zack Snyder", release=2007},
new Film(){id=3,name="Titanic",director="James Cameron", release=1997},
};
// GET film/movies
[HttpGet]
public IActionResult Get()
{
// some code
return Json(film);
}
// GET film/movies/{id}
[HttpGet("{id}")]
public IActionResult Get(int id)
{
// some code
return Json(film.FirstOrDefault(x => x.id == id));
}
[HttpPost]
public IActionResult Post([FromBody]Film value)
{
// some code
film.Add(value);
return Json(film);
}
}
Класс модели
public class Film
{
public int id { get; set; }
public string name { get; set; }
public string director { get; set; }
public int release { get; set; }
}
Тест
[Fact]
public async Task TestGet()
{
List<Film> film = new List<Film>()
{
new Film(){id=1,name="The Dark Knight",director="Christopher Nolan", release=2008},
new Film(){id=2,name="300",director="Zack Snyder", release=2007},
new Film(){id=3,name="Titanic",director="James Cameron", release=1997},
};
// Arrange
string expectedResult = JsonConvert.SerializeObject(film);
var requestUri = new Uri("http://localhost:51867/film/movies");
// Act
var mockHandler = new Mock<MoviesController>();
mockHandler
.Setup(x => x.Get())
.Returns(expectedResult);
var httpClient = new HttpClient(mockHandler.Object);
var result = await httpClient.GetStringAsync(requestUri).ConfigureAwait(false);
// Assert
Assert.Equal(expectedResult, result);
}
Я выполняю модульное тестирование, используя moq.Мне нужно смоделировать вызовы Get / Post в контроллерах, используя Moq HttpClient.Я не могу издеваться над объектом.Пожалуйста, дайте мне знать, что я делаю не так?Является ли возвращаемый тип IActionResult причиной его сбоя?Если да, что еще я могу использовать вместо IActionResult?