私はネットコアWEBAPIコントローラのアクションをテストするには、以下のxUnitテストを書く:.Net Coreのコントローラをテストすると常にfalseが返されますか?
AccountController:
namespace VistaBest.Api.Controllers
{
public class AccountController : BaseController
{
private readonly IUsersBusinessObject _usersBusinessObject;
public AccountController(IUsersBusinessObject usersBusinessObject)
{
_usersBusinessObject = usersBusinessObject;
}
[HttpPost]
public IActionResult ValidateUser(LoginModel model)
{
if(!ModelState.IsValid) return BadRequest(ModelState);
return Ok(_usersBusinessObject.ValidateUser(model.Username, model.Password.ToMd5Hash()));
}
}
}
IUsersBusinessObject:
namespace VistaBest.Data.BusinessObjects
{
public interface IUsersBusinessObject
{
bool ValidateUser(string username, string password);
UserModel SelectByUsername(string username);
}
public class UsersBusinessObject : BaseBusinessObject, IUsersBusinessObject
{
public UsersBusinessObject(IDbConnection connection) : base(connection)
{
}
private const string TableName = "Users";
public bool ValidateUser(string username, string password)
{
var query = $"SELECT COUNT(*) FROM [{TableName}] WHERE UserName = @username and Password = @password";
return DbConnection.QueryFirst<int>(query, new { username, password }) == 1;
}
}
ご覧のとおり私はusersBusinessObjectMock
はretする必要があります骨壷true
:
usersBusinessObjectMock
.Setup(service => service.ValidateUser(username, password))
.Returns(() => true);
しかしvar result = okObjectResult.Value as bool?;
は常にfalse
何が問題になっていますでしょうか?このエラーを見つけるのは本当に難しいですと、10分のようなあなたのコードを読んだ後
値をブール値にキャストするとどうなりますか?つまり、 'var result =(bool)okObjectResult.Value;' – Nkosi
@Nkosi:結果は常にfalseです。メインポストの画像のwatchセクションを参照してください。 –
私たちは間違ったティng。モックが正しく構成されていないため、期待どおりに動作しませんでした。私の答えをチェックしてください。 – Nkosi