[英]Unit testing MediaElement in Windows 8 (C#/XAML)
我有一個嘗試使用MediaElement編寫類的類,但是我不知道如何對與MediaElement交互的部分進行單元測試。 具體來說,我想確保打開文件會觸發正確的代碼,並且我自己的類的狀態與MediaElement的狀態一起更新。
我正在使用此處提到的ExecuteOnUIThread()技巧來創建和使用MediaElement,因為否則我將獲得RPC_E_WRONG_THREAD異常。
然后,我將使用此技巧來測試我自己類的事件,這些事件連接到MediaElement自己的MediaOpened和CurrentStateChanged事件。
但是,無論我將WaitOne設置為多長時間,從Internet打開MP3文件時都看不到任何激活的信息。 我嘗試繞過我自己的類並直接測試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單元測試來檢查流本身。 但是您應該能夠檢查狀態。
祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.