我想检查单元测试是否抛出了Correct BusinessException?

时间:2018-03-15 05:56:51

标签: c# unit-testing nunit

这是我在控制器中的方法。

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"那么抛出异常,我想检查一下这是我想要的正确异常吗?

2 个答案:

答案 0 :(得分:4)

您可以执行以下代码所示的相同操作。

jmeter -n -t <test JMX file> -l <test log file> -e -o <Path to output folder>

参考: NUnit Exception Asserts

<强>更新

 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));

然后,您将声明预期的异常与预期值一起抛出。

参考ThrowsConstraint