我有一个带有 MediaElement 的类,我正在尝试为其编写单元测试,但我不知道如何对与 MediaElement 交互的部分进行单元测试。具体来说,我想确保打开文件会触发正确的代码,并且我自己的类的状态与 MediaElement 的状态一起更新。
我正在使用此处提到的 ExecuteOnUIThread() 技巧来创建和使用 MediaElement,否则我将获得 RPC_E_WRONG_THREAD 异常。
然后我使用这个技巧来测试我自己的类的事件,这些事件连接到 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);
});
}