Windows8中MediaElement的单元测试(C#/XAML)

Windows8中MediaElement的单元测试(C#/XAML),c#,unit-testing,windows-8,mediaelement,C#,Unit Testing,Windows 8,Mediaelement,我有一个带有MediaElement的类,我正试图为其编写单元测试,但我不知道如何对与MediaElement交互的部分进行单元测试。具体地说,我希望确保打开一个文件会触发正确的代码,并且我自己的类的状态会随着MediaElement的更新而更新 我使用前面提到的ExecuteOnUIThread()技巧来创建和使用MediaElement,因为否则我将得到一个RPC_E_Error_线程异常 然后我使用它来测试我自己的类的事件,这些事件连接到MediaElement自己的MediaOpened

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

我使用前面提到的ExecuteOnUIThread()技巧来创建和使用MediaElement,因为否则我将得到一个RPC_E_Error_线程异常

然后我使用它来测试我自己的类的事件,这些事件连接到MediaElement自己的MediaOpened和CurrentStateChanged事件

然而,当我从互联网上打开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);这应该反映你的行动。如果您不能确定缓冲是否有足够的时间,并且您不想等待,这是可以的,那么您可以检查多个缓冲。例如,以下是选项:

Closed = 0
Opening = 1
Buffering = 2
Playing = 3
Paused = 4
Stopped = 5
调用Play()后,可以检查(打开|缓冲|播放)。明白我的意思吗?同时你可以检查它不应该是什么样子!(关闭|暂停|停止)。等等您可能无法在一个小的ole单元测试中检查流本身。但你应该能够检查状态


祝你好运

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

Closed = 0
Opening = 1
Buffering = 2
Playing = 3
Paused = 4
Stopped = 5
调用Play()后,可以检查(打开|缓冲|播放)。明白我的意思吗?同时你可以检查它不应该是什么样子!(关闭|暂停|停止)。等等您可能无法在一个小的ole单元测试中检查流本身。但你应该能够检查状态


祝你好运

我在进行测试时遇到了两个问题。首先,它不喜欢我尝试在单元测试中创建MediaElement;我得到一个RPC_E_错误的线程异常。我使用上面提到的一个技巧来处理UI元素,然后测试事件处理程序。但是我没有看到任何触发MediaOpened或PlayStateChanged事件的东西。在让测试正常工作方面,我有两个问题。首先,它不喜欢我尝试在单元测试中创建MediaElement;我得到一个RPC_E_错误的线程异常。我使用上面提到的一个技巧来处理UI元素,然后测试事件处理程序。但我没有看到任何触发MediaOpen或PlayStateChanged事件的东西。