我有迭代图像的课程。
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):
[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);
});
}
}
为什么这个测试成功?
答案 0 :(得分:4)
nUnit,截至目前,并不直接支持异步测试(但是,MSTest和xUnit会这样做。)
你可以通过等待结果来解决这个问题,如下所示:
[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的东西,它支持测试异步代码,即:
[TestMethod]
public async Task ElementOfImagesIsNotNull()
{
var images = await _pic.GetImagesAsync();
BitmapImage image = r.Result[0];
image = null;
Assert.IsNotNull(image);
}