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

MyN*_*ame 0 c# unit-testing

我需要测试确切的Argument Exception是谨慎的.是否真的可以理解方法中的异常是谨慎的吗?

    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;
    }
Run Code Online (Sandbox Code Playgroud)

我的单元测试此方法:

 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));
}
Run Code Online (Sandbox Code Playgroud)

Nit*_*tin 6

你正在以错误的方式测试它.应该测试功能以不抛出异常,因为您已经在Create Method中捕获了异常.相反,你应该断言JsonResult 包含你的ModelState应该有错误,以防Create方法中引发异常.