C# 使用try/catch时单元测试失败

C# 使用try/catch时单元测试失败,c#,unit-testing,C#,Unit Testing,我需要测试参数异常是否正确。真的有可能理解方法中的异常是CAUGHT吗 public JsonResult Create(TeamViewModel teamViewModel) { JsonResult result = null; try { // here exception throws var domainTeam = teamViewMode

我需要测试参数异常是否正确。真的有可能理解方法中的异常是CAUGHT吗

    public JsonResult Create(TeamViewModel teamViewModel)
    {
        JsonResult result = null;
            try
            {
                // here exception throws
                var domainTeam = teamViewModel.ToDomain();
                  ...
            }
            catch (ArgumentException ex)
            {
                this.ModelState.AddModelError(string.Empty, ex.Message);
                result = this.Json(this.ModelState);
            }           

        return result;
    }
此方法的我的单元测试:

 public void Create_InvalidTeamAchievements_ArgumentExceptionThrown()
 {
    Exception exception = null;
    string invalidAchievements = CreateInvalidTeamAchievements();

    // Arrange
    var viewModel = new TeamMvcViewModelBuilder().WithAchievements(invalidAchievements).Build();
    var sut = _kernel.Get<TeamsController>();

    // Act
    try
    {
        sut.Create(viewModel);
    }
    catch (ArgumentException ex)
    {
        exception = ex;
    }

    // Assert
    VerifyExceptionThrown(exception, string.Format(Resources.ValidationTeamAchievements, 
                Constants.Team.MAX_ACHIEVEMENTS_LENGTH));
}
public void Create\u invalidTeamOccessments\u ArgumentExceptionThrown()
{
异常=空;
字符串invalidAchievents=createInvalidTeamAchievents();
//安排
var viewModel=new TeamMvcViewModelBuilder();
var sut=_kernel.Get();
//表演
尝试
{
sut.Create(视图模型);
}
捕获(参数异常)
{
例外=例外;
}
//断言
VerifyExceptionThrown(异常,string.Format(Resources.validationTeamException,
常数.Team.MAX_成就(u长度));
}

您以错误的方式测试它。应该测试功能以不引发异常,因为您已经在Create方法中捕获了异常。相反,您应该断言,如果在
Create
方法中引发异常,则包含
ModelState
JsonResult
应该有错误。

您以错误的方式测试它。应该测试功能以不引发异常,因为您已经在Create方法中捕获了异常。相反,您应该断言,如果在
Create
方法中引发异常,则包含
ModelState
JsonResult
应该有错误。

到目前为止,在单元测试中使用try-catch通常是一个很大的禁忌。如果要测试是否引发异常,只需添加[ExpectedException]属性。在这一点上,在单元测试中,有一个try-catch通常是一个很大的禁忌。如果要测试是否引发异常,只需添加[ExpectedException]属性。