我正在测试一些在运行时正在运行的异步MVC .netcore代码,但是在单元测试期间遇到了ObjectDisposedexception。 背景:我有另一个类似于这个的方法,它执行单个异步操作,返回一个任务,并且在运行时也可以工作,当我对它进行单元测试时。 到目前为止,无论我如何重构这个我得到:'无法访问已处置的对象。对象名称:'System.Net.Http.StreamContent''在尝试单元测试时。
方法:
public async Task<IEnumerable<Foo>> GetFoos() {
var idList = GetFooIds();
var tasks = Enumerable.Range(0, idList.Count)
.Select(i => GetFooById(idList[i]));
var fooResults = await Task.WhenAll(tasks);
var foos = new HashSet<Foo>();
foos.UnionWith(fooResults.SelectMany(x => x));
return foos;
}
单元测试方法适用于单个异步任务,但不适用于此:
[TestMethod]
public void CanGetFoos() {
...
var result = service.GetFoos().Result;
Assert.AreEqual(2, result.Count());
}
我怀疑内在的方法是一个因素,但它是:
private async Task<List<Foo>> GetFooById(string id)
{
var nextPageExists = true;
var fooList = new List<Foo>();
var pageNumber = 1;
while (nextPageExists)
using (var response =
await Client.GetAsync(GetFooUri(id, pageNumber++))
{
var content = await response.Content.ReadAsStringAsync();
var fooResponse =
JsonConvert.DeserializeObject<Foo>(content);
fooList.AddRange(fooResponse.Objects);
if (!Convert.ToBoolean(fooList.More))
nextPageExists = false;
})
return fooList;
}