问题描述
我正在尝试对 Azure v3 HTTP 触发器实施一些单元/集成测试,但在该过程中遇到了一些问题。
我之前为使用如下语法的 API 控制器编写了一些测试:
TransactionResponse fakeResponse = new TransactionResponse { APIResponse = "Okay" };
var fakeSbus = A.Fake<IServiceBusPlatform>();
var fakeTransaction = A.Fake<ITransaction>();
A.CallTo(() => fakeTransaction.CreateTransaction(tran)).Returns(Task.FromResult(fakeResponse.APIResponse));
var controller = new SubmitController(fakeSbus,fakeTransaction);
var result = await controller._transaction.CreateTransaction(tran);
Assert.Equal(fakeResponse.APIResponse,result.ToString());
这很有效,因为它只是测试 dbcontext 然后断言返回。
我试图对 Azure 函数做的是根据 OkObjectResult 评估触发器,但在函数内部,我有一些方法调用,然后是依赖于方法调用结果的逻辑。 (返回一个列表,使用 ListMember[0] 的属性来声明一个 var)。像这样:
var BatchResults = await _dbService.RetrieveBatch(session);
var CompanyID = BatchResults[0].CompanyID;
更新:为了更清晰,这里是整个测试功能:
var fakeBatch = new List<RetrievedBatch>();
fakeBatch.Add(new RetrievedBatch
{
CompanyID = new Guid(),});
var testResponse = new OkObjectResult("OKAY");
var request = A.Fake<HttpRequest>();
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(fakeTransaction));
MemoryStream stream = new MemoryStream(byteArray);
request.Body = stream;
var logger = A.Fake<ILogger>();
var fakeService = A.Fake<IDbService>();
A.CallTo(() => fakeService.RetrieveBatch(fakeTransaction)).Returns(fakeBatch);
var test = fakeService.RetrieveBatch(fakeTransaction);
var SM = new SessionManager(fakeService);
var response = await SM.Run(request,logger);
哦,接口里面的方法/类型是这样的:
Task<List<RetrievedBatch>> RetrieveBatch(Transaction session);
错误发生在 SM.Run(x,y) 内部。经过一些调试,我可以看到 A.CallTo 在测试函数内部返回了正确的结果,但是在运行 Azure 函数时,该值没有被结转,这是代码破坏问题。
感谢任何帮助,因为我花了太多时间试图解决这个问题,而且所有示例都是基本的,不幸的是在这种情况下不是很有帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)