我在WebAPI MVC项目中有一个相当复杂的方法.它执行许多操作,包括命中远程服务器以进行用户身份验证.根据结果,它返回重定向(页面),字符串错误消息或表示所有身份验证monkey-business的对象.
从浏览器调用时效果很好.它甚至可以在调试中正常工作.我甚至可以写一个重定向到它并“手动”调用它,传递它需要的任何参数.
我遇到的问题是在创建WebAPI项目时从测试项目VS调用它.我怀疑这是因为因为所有异步和等待被抛出.当它进入它时,最终它会返回一个“对象未设置为对象的实例”错误.
由于它适用于任何其他环境,我认为这是因为它在测试项目中并且需要等待.任何人都可以给我任何建议吗?
编辑:非常具体,这里的第二行代码失败了:
BoxConfig BoxConfig = new BoxConfig(ClientID,ClientSecret,enterpriseID,prvt,JWTPublicKeyPass,JWTPublicKeyID); BoxJWTAuth BoxJWT = new BoxJWTAuth(BoxConfig); //This is a JSON web token and is needed to authorize the enterprise level app user.
代码上下文:
这是利用Box.com API. BoxJWT调用创建一个JSON Web令牌.我不知道在这个过程中它失败了,因为当我追踪它时,它无法向我显示像PEMReader.cs之类的东西的代码(这与加密,弹性城堡有关).但非常具体,错误消息详细说明源是Box.V2.JWTAuth.PEMPasswordFinder.GetPassword()
解决方法
每当我创建一个测试异步代码的测试方法时,我都要确保测试方法的签名是Async并返回Task.这允许您避免来自异步void的可怕死锁.现在你可以等待测试方法.
更多信息:https://msdn.microsoft.com/en-us/magazine/dn818493.aspx
例:
[TestMethod] public async Task myTestMethod() { await MyMethodToTest(); }