Assert.ThrowsException测试失败时它会抛出异常

时间:2017-02-23 19:31:28

标签: c# unit-testing visualstudio.testtools

我使用Microsoft.VisualStudio.TestTools.UnitTesting进行单元测试。

我有这个测试,断言抛出了一个异常并且它失败了

[TestMethod]
public async Task ShouldThrowHttpExceptionIfPassedObjectIsNull()
{
    _mockLogger = new Mock<ILogger<DataService>>();

    // setup memoryCache
    object expected = null;
    _mockNullMemoryCache = MockMemoryCacheService.GetNullMemoryCache(expected);
    _mockSessionManagementService = new MockSessionManagementService();

    _ds = new DataService(
        _mockLogger.Object,
        _mockNullMemoryCache.Object,
        _mockSessionManagementService
    );
    Assert.ThrowsException<HttpException>(() => _ds.RetrieveFileData<object>(_incorrectFilePath, false));
}

当我调试它时,在错误输出和失败之前运行的最后一行代码是:

enter image description here

异常exsystem.invalidOperationException,但这不重要,因为它会抛出HttpException,而不管是什么。为什么测试失败的原因是:

  

测试名称:ShouldThrowHttpExceptionIfPassedObjectIsNull测试   FullName:xxx.xxx.xxx.xxx.ShouldThrowHttpExceptionIfPassedObjectIsNull   测试   来源:C:\ Users \ xxx \ xxx.cs   :第88行测试结果:测试失败时间:0:04:35.5251661

     

结果StackTrace:at   xxxxxx.d__10.MoveNext()   在   C:\ Users \用户XXX \ XXX \ xxx.cs:线   101   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务   任务)   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)结果消息:Assert.ThrowsException失败。没有例外   抛出。预计会出现HttpException异常。

修改 然后代码在图像后移动到此代码块中:

else
                {
                    // Parsing issue
                    _logger.LogError(string.Format("Id={0}, Could not retrieve data from {1} : Malformed source data", _sessionManagementService.SessionId, url));
                    throw new HttpException(HttpStatusCode.InternalServerError, "Malformed source data", true);
                }

因为它抛出上面的HttpException,它会抛出一个DllNotFoundException。

  

抛出异常:&#39; System.DllNotFoundException&#39;在   System.Private.CoreLib.ni.dll

     

其他信息:无法加载DLL&#39; combase.dll&#39;:The   找不到指定的模块。 (HRESULT的例外情况:   0x8007007E)

1 个答案:

答案 0 :(得分:2)

当我查看HttpException的类型层次结构时,我发现它不会从InvalidOperationException继承。因此,单元测试失败了。

可能有一些LINQ代码或其他代码无法正确执行,因此捕获HttpException并将其转换为InvalidOperationException。

您应该能够调试单元测试。指示Visual Studio停止异常,然后继续前进并尝试找出异常转换的位置,例如当你单步执行一些LINQ代码时。

MoveNext()调用表示某些东西试图循环遍历值。在调试时,禁用Just my code,因为它可能在.NET框架中。