2

我有迭代图像的课程。

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);
            });
        }
}

为什么这个测试成功?

4

1 回答 1

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);
    }
于 2012-09-27T16:23:13.890 回答