我使用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));
}
当我调试它时,在错误输出和失败之前运行的最后一行代码是:
异常ex
是system.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)
答案 0 :(得分:2)
当我查看HttpException的类型层次结构时,我发现它不会从InvalidOperationException继承。因此,单元测试失败了。
可能有一些LINQ代码或其他代码无法正确执行,因此捕获HttpException并将其转换为InvalidOperationException。
您应该能够调试单元测试。指示Visual Studio停止异常,然后继续前进并尝试找出异常转换的位置,例如当你单步执行一些LINQ代码时。
MoveNext()调用表示某些东西试图循环遍历值。在调试时,禁用Just my code,因为它可能在.NET框架中。