我正在为下面的代码编写一些单元测试的建议。除了实现(它不是我的代码,但我已被委托追溯为它编写一些测试)有人会建议我如何测试它吗?我没有使用nUnit或类似的框架;我正在使用Visual Studio内置的测试工具。
我对编写单元测试相当新,但我想我至少应测试以下内容:
SaveFormBrokerResponse()
方法catch()
Task
,但不确定如何执行此操作我已经剥离了这个功能,主要是与实例化和一些对象的填充:
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
实现是棘手和可疑的,并且这里有一些集成测试问题,但是说我不能(当前)改变实现并需要为我编写测试有
答案 0 :(得分:4)
你做不到。您已经创建了一个方法来触发异步操作,然后不会向调用者公开任何观察该操作的完成/结果的方法。有很多方法可以执行此操作(返回任务,接受回调,事件等),但是您需要为调用者执行某些以便能够观察异步操作的结果。如果该方法没有暴露任何东西,那么调用者就无法可靠地做任何事情。