gpt4 book ai didi

c# - Windows 8 中的单元测试 MediaElement (C#/XAML)

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:22 25 4
gpt4 key购买 nike

我有一个包含 MediaElement 的类,我正在尝试为其编写单元测试,但我不知道如何对与 MediaElement 交互的部分进行单元测试。具体来说,我想确保打开文件会触发正确的代码,并且我自己的类的状态会随着 MediaElement 的状态一起更新。

我正在使用提到的 ExecuteOnUIThread() 技巧 here创建和使用 MediaElement,否则我将收到 RPC_E_WRONG_THREAD 异常。

然后我使用 this trick能够测试我自己的类的事件,这些事件连接到 MediaElement 自己的 MediaOpened 和 CurrentStateChanged 事件。

但是,当我从 Internet 打开 MP3 文件时,无论我将 WaitOne 设置多长时间,我都没有看到任何东西被激活。我试过绕过我自己的类并直接测试 MediaElement,但事件似乎根本没有触发。

这是我正在使用的测试方法:

[TestMethod]
public async Task TestMethod1()
{
await ExecuteOnUIThread(() =>
{
var me = new MediaElement();
bool opened = false;
var mre = new ManualResetEvent(false);
me.MediaOpened += delegate
{
opened = true;
mre.Set();
};
me.Source = new Uri("http://dl.dropbox.com/u/52389/test-song.mp3");
mre.WaitOne(5000);

Assert.IsTrue(opened);
});
}

最佳答案

在您的命令之后,检查 CurrentState (Windows.UI.Xaml.Media.MediaElementState);那应该反射(reflect)你的行为。如果你不能确定缓冲是否有足够的时间并且你不想等待它,这没关系,那么你可以检查一个以上。例如,这里是选项:

Closed = 0
Opening = 1
Buffering = 2
Playing = 3
Paused = 4
Stopped = 5

调用 Play() 后,您可以检查(打开 | 缓冲 | 播放)。明白了吗?同时你可以检查它不应该是什么样的!(关闭|暂停|停止)。等等。您可能无法在一个小的 ole 单元测试中检查流本身。但是您应该能够检查状态。

祝你好运!

关于c# - Windows 8 中的单元测试 MediaElement (C#/XAML),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12754755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com