我尝试使用xUnit来测试Update方法,但我不知道如何做到这一点,下面是我的代码:
将方法放入控制器:
[HttpPut]
[Route("{id}")]
public IActionResult Put([FromBody]BookDto book, [FromRoute]int id)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
var isUpdated = _service.Update(book);
if (!isUpdated)
{
return NotFound();
}
return Ok();
}
BookService更新方法:
public bool Update(BookDto book)
{
var bookDb = _context.Books.FirstOrDefault(x => x.Id == book.Id);
if(bookDb == null)
{
return false;
}
bookDb.Title = book.Title;
_context.SaveChanges();
var existingAuthors = _context.Book_Authors.Where(x => x.BookId == book.Id).ToList();
_context.Book_Authors.RemoveRange(existingAuthors);
_context.SaveChanges();
foreach (var AuthorsId in book.AuthorsId)
{
var newBookAuthors = new Book_Author()
{
BookId = book.Id,
AuthorId = AuthorsId
};
_context.Book_Authors.Add(newBookAuthors);
}
_context.SaveChanges();
return true;
}
登记日期:
public class BookDto
{
public int Id { get; set; }
public string Title { get; set; }
public List<int> AuthorsId { get; set; }
}
对于如何使用Moq编写PutMethod测试有什么建议吗?
1条答案
按热度按时间5us2dqdw1#
*给定无效的帐簿当我调用put时然后返回错误请求
*给定不存在的帐簿当调用put时返回not Found
*给定现有帐簿当调用put时然后返回ok
*安排:设置一个图书服务模拟,每当有人调用更新时,它都会返回false
*Act:调用控制器的put方法
*Assert:验证返回的结果是否未按预期找到
验证服务的
Update
方法是否仅使用book
变量调用过一次也是一种很好的做法:serviceMock.Verify(svc => svc.Update(book), Times.Once);
.