我正在尝试为控制器操作编写单元测试。 我正在使用NUnit 3和Moq。
我在操作中有Db方法,例如Add()和Remove()。
我知道我需要模拟Db并相应地设置方法的返回值。
但是,涉及诸如db.Add(),db.Remove(),db.SaveChanges()等方法时,我不明白如何设置相同的true和false返回值。
我要测试的动作:
[HttpPost]
[Route("Add")]
public List<string> Add([FromBody]model addModel)
{
List<string> errors = new List<string>();
try
{
model Model= new model()
{
propertyA = addModel.propertyA
};
db.Add(Model);
db.SaveChanges();
}
catch (Exception e)
{
errors.Add(e.Message);
return errors;
}
errors.Add("Success");
return errors;
}
要为上述方法编写正面和负面的测试,我需要能够为db.Add()和db.SaveChanges()方法设置正面和负面的返回值。
我尝试了以下方法:
[TestCase]
public void Add_Succesfull_True()
{
Mock<DbContext> mockdb = new Mock<DbContext>();
var model= db.model.Select(x => x).FirstOrDefault();
model addModel = new model()
{
propertyA= model.propertyA
};
AuthController authController = new AuthController(userManager, configuration, mockdb.Object);
var apiEndPoint = authController.Add(addModel);
mockdb.Setup(x => x.Add(addModel)).Returns(??);
Assert.IsTrue(apiEndPoint.Contains("Success"));
}
通过智能感知,我可以看到db.Add()期望返回类型为
Microsoft.EntityFrameworkCore.ChangeTracking。
我对模拟DbContext的理解如下:
我相信我以错误的方式嘲笑了上述内容。 需要指导谢谢:)