gpt4 book ai didi

c# - 调用另一个 void 的单元测试 Void 方法,启动 Task()

转载 作者:行者123 更新时间:2023-11-30 14:09:16 24 4
gpt4 key购买 nike

我正在寻找有关为下面的代码编写一些单元测试的建议。除了实现(这不是我的代码,但我的任务是追溯地为它编写一些测试)有人可以建议我如何测试它吗?我没有使用 nUnit 或类似的框架;我正在使用 Visual Studio 内置的测试工具。

我对编写单元测试还很陌生,但我想我至少应该测试以下内容:

  • 传递给 SaveFormBrokerResponse() 方法的有效响应
  • 测试 catch() 抛出的有效异常
  • 正在测试启动的任务,但不确定如何执行此操作

我已经从这个函数中剥离了一点,主要是为了一些对象的实例化和填充:

public void SaveResponse(IForm form, bool isLive, HttpRequestBase request)
{
try
{
var response = new FormBrokerResponses();
// Initialize some vars on response

using (var memory = new MemoryStream())
{
var serializer = new DataContractSerializer(typeof(FormKeyValue[]));
serializer.WriteObject(memory, request.Form.AllKeys.Select(r => new FormKeyValue(r, request.Form[r])).ToArray());
memory.Flush();
memory.Seek(0, SeekOrigin.Begin);
response.Values = Encoding.UTF8.GetString(memory.ToArray());
}

_dataHandler.SaveFormBrokerResponses(response);
}
catch (Exception ex)
{
throw new Exception("boom explosions");
}

Task.Factory.StartNew(() => DispatchFormResponseViaEmail(form, isLive, request.Form.AllKeys.ToDictionary(r => r, r => (object)request.Form[r])));
}

我意识到测试 void 实现是棘手且有问题的,并且这里有一些集成测试问题,但这意味着我不能(当前)更改实现并且需要为什么编写测试我有。

最佳答案

你不能。您已经创建了一个触发异步操作的方法,然后不向调用者公开任何观察该操作的完成/结果的方法。有很多方法可以做到这一点(返回任务、接受回调、事件等),但您需要为调用者做一些事情,以便能够观察异步操作的结果.如果该方法未公开任何内容,则调用者无法可靠地执行任何操作。

关于c# - 调用另一个 void 的单元测试 Void 方法,启动 Task(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30171998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com