gpt4 book ai didi

c# - 如何使用内部任务对 void 方法进行单元测试

转载 作者:太空狗 更新时间:2023-10-30 00:19:13 24 4
gpt4 key购买 nike

我有一个由 ViewModel 使用和调用的图形方法 CancelChanges()。我想测试这个方法,但我们里面有一个任务。我们使用任务来不卡住 UI。我的测试方法需要等待这个任务的结果来检查结果。

代码是:

public override void CancelChanges()
{
Task.Run(
async () =>
{
this.SelectedWorkflow = null;
AsyncResult<IncidentTypeModel> asyncResult = await this.Dataprovider.GetIncidentTypeByIdAsync(this.Incident.Id);

Utils.GetDispatcher().Invoke(
() =>
{
if (asyncResult.IsError)
{
WorkflowMessageBox.ShowException(
MessageHelper.ManageException(asyncResult.Exception));
}
else
{
this.Incident = asyncResult.Result;
this.Refreshdesigner();
this.HaveChanges = false;
}
});
});
}

还有我的测试方法:

/// <summary>
/// A test for CancelChanges
/// </summary>
[TestMethod]
[TestCategory("ConfigTool")]
public void CancelChangesTest()
{
string storexaml = this._target.Incident.WorkflowXamlString;
this._target.Incident.WorkflowXamlString = "dsdfsdgfdsgdfgfd";

this._target.CancelChanges();

Assert.IsTrue(storexaml == this._target.Incident.WorkflowXamlString);
Assert.IsFalse(this._target.HaveChanges);
}

我们怎样才能让我的测试等待任务的结果?

谢谢。

最佳答案

使 CancelChanges 方法返回一个 Task,然后等待它或在测试方法中设置一个延续。有些像这样

public override Task CancelChanges()
{
return Task.Factory.StartNew(() =>
{
// Do stuff...
});
}

请注意从 Task.RunTask.Factory.StartNew 的变化。在这种情况下,这是启动任务的更好方法。然后在测试方法中

[TestMethod]
[TestCategory("ConfigTool")]
public void CancelChangesTest()
{
string storexaml = this._target.Incident.WorkflowXamlString;
this._target.Incident.WorkflowXamlString = "dsdfsdgfdsgdfgfd";
this._target.CancelChanges().ContinueWith(ant =>
{
Assert.IsTrue(storexaml == this._target.Incident.WorkflowXamlString);
Assert.IsFalse(this._target.HaveChanges);
});
}

您也可以将测试方法标记为 async 并在测试方法中使用 await 来做同样的事情。

希望对您有所帮助。

关于c# - 如何使用内部任务对 void 方法进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23827877/

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