【发布时间】:2015-12-14 16:50:50
【问题描述】:
考虑以下代码:
public interface IBar
{
Task<IEnumerable<string>> GetStringsAsync();
}
public class Foo
{
public Foo(IBar bar, IList<string> initial)
{
MyCollection = new ObservableCollection<string>();
if (initial == null || !initial.Any())
AddContent(bar);
else
MyCollection.AddRange(initial);
}
public ObservableCollection<string> MyCollection { get; private set; }
public void AddContent(IBar bar)
{
var cancel = new CancellationTokenSource();
bar.GetStringsAsync().ContinueWith(
task => MyCollection.AddRange(task.Result),
cancel,
TaskContinuationOptions.NotOnCancel,
TaskScheduler.FromCurrentSynchronizationContext());
}
}
如何对 Foo.AddContent 方法进行单元测试?我想测试我的模拟 IBar 提供的字符串是否确实被添加到集合中,但断言总是在任务更新集合之前被调用。
我正在使用 .NET 4.5.2。我的第一选择是在 AddContent 中使用 async 和 await,但是因为在构造函数中使用了该方法,所以我认为最好避免这种情况。我需要一些可以启动数据异步加载但不会等待它完成的东西。
欢迎提出有关如何重写 AddContent 的建议,但我已经尝试了很多东西,这是唯一一个效果很好的,所以我真正想要的是一种测试它的方法。
【问题讨论】:
标签: c# unit-testing asynchronous synchronizationcontext