这是我在控制器中的方法。
public ActionResult DeleteModelAliasData(string alias)
{
if (!ModelState.IsValid)
{
ModelState.LogModelStateError();
throw new BusinessException("COMMON_ERROR");
}
var response = _vehicleDataBusinessService.DeleteModelAliasData(alias);
return Json(response);
}
我是单元测试的新手,我想编写单元测试,当" !ModelState.IsValid
"那么抛出异常,我想检查一下这是我想要的正确异常吗?
答案 0 :(得分:4)
您可以执行以下代码所示的相同操作。
jmeter -n -t <test JMX file> -l <test log file> -e -o <Path to output folder>
<强>更新强>
var ex = Assert.Throws<BusinessException>(() => controller.DeleteModelAliasData(alias));
Assert.That(ex.Message, Is.EqualTo("COMMON_ERROR"));
答案 1 :(得分:1)
当模型状态字典为空时,ModelState.IsValid
的默认值为true
。
这意味着为了使测试中的方法在所需的路径中流动,您需要确保模型状态按预期运行。
这可以通过向模型状态添加模型错误来完成
例如
//Arrange
//...initialize controller and its dependencies
//add model error to force IsValid to be false.
controller.ModelState.AddModelError("PropertyName", "Error Message");
var alias = string.Empty;
var expectedErrorMessage = "COMMON_ERROR";
//Act
Action act = () => controller.DeleteModelAliasData(alias);
//Assert
Assert.That(act, Throws.TypeOf<BusinessException>()
.With.Message.EqualTo(expectedErrorMessage));
然后,您将声明预期的异常与预期值一起抛出。