如何纠正异步方法写入测试? [英] How to correct write test with async methods?
本文介绍了如何纠正异步方法写入测试?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有类迭代的图像。
public class PictureManager
{
private int _current;
public List<BitmapImage> _images = new List<BitmapImage>(5);
public static string ImagePath = "dataImages";
public async void LoadImages()
{
_images = await GetImagesAsync();
}
public async Task<List<BitmapImage>> GetImagesAsync()
{
var files = new List<BitmapImage>();
StorageFolder picturesFolder = await KnownFolders.PicturesLibrary.GetFolderAsync("dataImages");
IReadOnlyList<IStorageItem> itemsList = await picturesFolder.GetItemsAsync();
foreach(var item in itemsList)
{
if(!(item is StorageFile)) continue;
var tempImage = new BitmapImage(new Uri(item.Path));
Debug.WriteLine(string.Format("add {0}", item.Path));
files.Add(tempImage);
}
return files;
}
}
和我写这篇文章的测试方法(我用NUnit的):
And I write this test method(I use nUnit):
[TestFixture]
public class PictureManagerTest
{
private PictureManager _pic;
[SetUp]
public void Init()
{
_pic = new PictureManager();
_pic.LoadImages();
}
[Test]
public void ElementOfImagesIsNotNull()
{
_pic.GetImagesAsync().ContinueWith(r =>
{
BitmapImage image = r.Result[0];
image = null;
Assert.IsNotNull(image);
});
}
}
为什么这个测试是成功的?
Why this test is successful?
推荐答案
NUnit的,截至目前,不直接支持异步测试(MSTest的和做的xUnit,不过)。
nUnit, as of right now, doesn't directly support asynchronous tests (MSTest and xUnit do, however).
您可以变通的作法是等待的结果,就像这样:
You can work around this by waiting on the results, like so:
[Test]
public void ElementOfImagesIsNotNull()
{
var continuation = _pic.GetImagesAsync().ContinueWith(r =>
{
BitmapImage image = r.Result[0];
image = null;
Assert.IsNotNull(image);
});
// Block until everything finishes, so the test runner sees this correctly!
continuation.Wait();
}
第二个选择,当然是使用像MSTest的,它不支持异步测试code,即:
The second option, of course, would be to use something like MSTest, which does support testing asynchronous code, ie:
[TestMethod]
public async Task ElementOfImagesIsNotNull()
{
var images = await _pic.GetImagesAsync();
BitmapImage image = r.Result[0];
image = null;
Assert.IsNotNull(image);
}
这篇关于如何纠正异步方法写入测试?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文