第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

測(cè)試身份驗(yàn)證方法

測(cè)試身份驗(yàn)證方法

C#
慕的地8271018 2022-09-04 16:28:00
我目前正在嘗試學(xué)習(xí)單元測(cè)試,并且我已經(jīng)在 ASP.NET Core中創(chuàng)建了項(xiàng)目,因此我可以在真實(shí)示例中學(xué)習(xí)測(cè)試。我想在API控制器中測(cè)試身份驗(yàn)證方法的快樂(lè)路徑,因此它將返回OkObjectResult。到目前為止,我擁有什么。我想測(cè)試的控制器方法        [AllowAnonymous]        [HttpPost("authenticate")]        public IActionResult Authenticate([FromBody]User userParam)        {            var user = _userService.Authenticate(userParam.Nickname,             userParam.Password).Result;            if(user == null)            {                return BadRequest(                  new { message = "Username or password is incorrect " }                );            }            return Ok(user);        }在實(shí)現(xiàn) IUserService 的類(lèi)中對(duì)方法進(jìn)行身份驗(yàn)證:public async Task<User> Authenticate(string nickname, string password)        {            var user = _repository.User.GetAllUsersAsync().Result.SingleOrDefault(u => u.Nickname == nickname && u.Password == password);            if(user == null)            {                return null;            }            var tokenHandler = new JwtSecurityTokenHandler();            var key = Encoding.ASCII.GetBytes(_appSettings.Secret);            var tokenDescription = new SecurityTokenDescriptor            {                Subject = new ClaimsIdentity(new Claim[]                {                    new Claim(ClaimTypes.Name, user.UserId.ToString())                }),                Expires = DateTime.UtcNow.AddDays(7),                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)            };            var token = tokenHandler.CreateToken(tokenDescription);            user.Token = tokenHandler.WriteToken(token);            try            {                await _repository.User.UpdateUserAsync(user);                user.Password = null;                return user;            }            catch (Exception e)            {                return user;            }        }但是,單元測(cè)試返回的是 BadRequest,而不是按預(yù)期返回 OkObjectResult。這意味著該用戶實(shí)際上可能是空的,并且它正在拋出一個(gè)BadRequest。我應(yīng)該模擬存儲(chǔ)庫(kù)而不是IUserService嗎?
查看完整描述

1 回答

?
開(kāi)滿天機(jī)

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊

實(shí)際上,你做得很好,并且做得很好(真正使用AAA的開(kāi)發(fā)人員太少了,這非??杀?qǐng)記住,默認(rèn)情況下Mock返回default(T)值。因此,您的Authorban方法被模擬并返回默認(rèn)值(User),該默認(rèn)值為空。只需讓它返回您的存根用戶:


 var mockService = new Mock<IUserService>();

 var user = new User()

        {

            UserId = 4,

            IsAdmin = true,

            Token = "12983912803981",

            IsLogged = true,

            MessagesSent = null,

            MessagesReceived = null,

            Nickname = "test3",

            Password = "Str0ngP@ssword123",

            UserChannels = null

        };

 mockService.Setup(x=> x.Authenticate(It.IsAny(), It.IsAny())).Returns(user);

或者@xander提出的更嚴(yán)格的版本:


 mockService.Setup(x=> x.Authenticate("test3", "Str0ngP@ssword123")).Returns(user);

它還將檢查您是否實(shí)際使用了在 User 中傳遞的值,而不僅僅是盲目地返回 Ok()。


查看完整回答
反對(duì) 回復(fù) 2022-09-04
  • 1 回答
  • 0 關(guān)注
  • 130 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)