【问题标题】:Unit testing MediaElement in Windows 8 (C#/XAML)Windows 8 中的单元测试 MediaElement (C#/XAML)
【发布时间】:2012-09-27 02:40:58
【问题描述】:

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

我正在使用here 中提到的 ExecuteOnUIThread() 技巧来创建和使用 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);
    });
}

【问题讨论】:

    标签: c# unit-testing windows-8 mediaelement


    【解决方案1】:

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

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

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

    祝你好运!

    【讨论】:

    • 我在让测试正常工作方面遇到了两个问题。首先,它不喜欢我尝试在单元测试中创建 MediaElement;我得到一个 RPC_E_WRONG_THREAD 异常。我使用here 提到的技巧来处理 UI 元素,然后使用this trick 来测试事件处理程序。但我没有看到任何触发 MediaOpened 或 PlayStateChanged 事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多