亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何在核心 Web api 中測試我的數據注釋字段?

我如何在核心 Web api 中測試我的數據注釋字段?

C#
臨摹微笑 2023-09-24 11:40:23
我嘗試為我的 API 控制器方法創建測試。簡單來說,我寫了add方法。    [HttpPost]    [AllowAnonymous]    public async Task<IActionResult> AddAsync([FromBody]BaseUserDTO dto)    {        if (ModelState.IsValid)        {            return Ok();        }        else        {            return ValidationProblem();        }    }在 dto 模型中我有public class BaseUserDTO{    [Required(ErrorMessage = "This field should be filled in", AllowEmptyStrings = false)]    [RegularExpression(@"(^[a-zA-Z0-9_ -]+$)", ErrorMessage = ("Use only Latin characters"))]    public string FirstName { get; set; }    [Required(ErrorMessage = "This field should be filled in", AllowEmptyStrings = false)]    [RegularExpression(@"(^[a-zA-Z0-9_ -]+$)", ErrorMessage = ("Use only Latin characters"))]    public string LastName { get; set; } }我寫了第一個嘗試測試數據注釋[Fact]public async Task UserValidationError()    {        //Arrange        BaseUserDTO userDTO = new BaseUserDTO        {            FirstName = "222A@@@",            LastName = "Test",            Email = "[email protected]",            PhoneNumber = "(111)111-1111",            Role = 0,            Password = "1234567A",            RetypePassword = "1234567A"        };        UserController controller = new UserController(userServicesMock.Object, mapperMock.Object, loggerMock.Object);        //Act        IActionResult result = await controller.AddAsync(userDTO);        //Assert        Assert.IsType<BadRequestObjectResult>(result);    }但模型狀態總是正確的,我不明白為什么會發生???我的第二次嘗試在啟動時在 mongo 連接中獲取 NullReference startup(在正常情況下它工作良好(當應用程序工作時),由郵遞員檢查)[Fact]public async Task UserValidationError(string userState)    {        //Arrange        BaseUserDTO userDTO = new BaseUserDTO        {            FirstName = "222A@@@",            LastName = "Test",            Email = "[email protected]",            PhoneNumber = "(111)111-1111",            Role = 0,            Password = "1234567A",            RetypePassword = "1234567A"        };    }通常如何創建單元測試來檢查DataAnnotation驗證?或者如何正確檢查此驗證?
查看完整描述

1 回答

?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

using System.ComponentModel.DataAnnotations;

/*other using*/


[Fact]

public void UserValidationError()

{

? ? //Arrange

? ? BaseUserDTO userDTO = new BaseUserDTO

? ? {

? ? ? ?FirstName = "222A@@@",

? ? ? ?LastName = "Test",

? ? ? ?Email = "[email protected]",

? ? ? ?PhoneNumber = "(111)111-1111",

? ? ? ?Role = 0,

? ? ? ?Password = "1234567A",

? ? ? ?RetypePassword = "1234567A"

? ? };


? ? //ACT

? ? var lstErrors = ValidateModel(userDTO);


? ? //ASSERT

? ? Assert.IsTrue(lstErrors.Count == 1);? ?

? ? //Or?

? ? Assert.IsTrue(lstErrors.Where(x => x.ErrorMessage.Contains("Use only Latin characters")).Count() > 0);

}


//http://stackoverflow.com/questions/2167811/unit-testing-asp-net-dataannotations-validation

? ? ? ? private IList<ValidationResult> ValidateModel(object model)

? ? ? ? {

? ? ? ? ? ? var validationResults = new List<ValidationResult>();

? ? ? ? ? ? var ctx = new ValidationContext(model, null, null);

? ? ? ? ? ? Validator.TryValidateObject(model, ctx, validationResults, true);

? ? ? ? ? ? return validationResults;

? ? ? ? }

查看完整回答
反對 回復 2023-09-24
  • 1 回答
  • 0 關注
  • 141 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號