модульный тест Метод, который использует как поток, который вызывает событие в ThreadInterruptedException c# - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть метод (Play), который перехватывает ThreadInterruptException и вызывает в нем обработчик события. Это метод stati c в классе stati c.

Я хочу протестировать этот метод, отправив ему прерывание и посмотреть, получаю ли я обратный вызов по событию. Как я могу это сделать? Я попытался запустить код ниже, но функция обратного вызова не вызывает.

public static class HelperClass{
public static EventHandler<HelperEventArgs> EvActionEndedhandler;

public class HelperEventargs: EventArgs
{
    public string ErrorMsg {get; set;}
    public int Processed {get; set;}
}

public static void Play(object o)
{
    try{
    //some code that runs in a loop
    }
    catch(ThreadInterruptedException)
    {
        EvActionEndedhandler(2, new HelperEventArgs {processed = processed});
        return;
    }
}}

в моем тестовом проекте

Я использую визуальный студийный фреймворк для тестирования

[TestMethod()]

public void PlayPauseOnInterruptTest()
{
    HelperClass.EvActionEndedHandler += (sender, args) =>
    {
        if ((int)sender == 2) paused = true;
    };
}
var runningThread = new Thread(HelperClass.Play);
    try
    {
        runningThread.Start();
        if (runningThread.IsAlive)
            runningThread.Interrupt();
        while (runningThread.IsAlive)
        {
            if (paused)
            {
                Assert.IsTrue(paused);
                return;
            }
        }
        Assert.IsTrue(paused);
    }
    catch (Exception e)
    {
    }
}
...