-1
votes

Éviter le thread.sleep dans le code pendant que des tests unitaires avec MOQ

J'ai des méthodes qui ont plusieurs threads.sleep qui durent 20 secondes parfois. Ceci est une exigence d'entreprise. J'essaie d'appuyer sur ces méthodes, en moqueur et en sautant ces dormeurs afin que les tests puissent fonctionner plus rapidement et n'attendent pas 20 secondes. En utilisant le cadre du MOQ. Appréciez les idées sur la manière de mettre en œuvre cela.


2 commentaires

La méthode de la moindre friction pour le code qui n'a pas été conçue pour la qualification serait de prendre en compte l'appel de veille dans une méthode virtuelle pouvant être moquée.


Si la durée de fonctionnement doit être de 20 secondes, le test le plus précieux testera la mise en œuvre réelle. Si vous souhaitez tester quelque chose qui a appelé entre dormir, extraire ces opérations vers une méthode ou une classe qui peut être testée séparément


3 Réponses :


1
votes

Vous pouvez réellement introduire l'interface pour les méthodes de thread.sleep et ceci que vous pouvez vous moquer lors de l'écriture UTS

 public class Class1
{
    IThreadSleep _threadSleep;
    public Class1(IThreadSleep threadSleep)
    {
        _threadSleep = threadSleep;

    }

    public void SomeMethod()
    {
        // 
        _threadSleep.Sleep(100);
    }
}


0 commentaires

0
votes

Je ne connais pas le code réel que vous avez, mais au moins avoir une idée. Vous pouvez envelopper votre thread.sleep dans l'interface puis injecter celui-ci à votre gestionnaire d'entreprise \ contrôleur. Dans l'utilisation actuelle de la mise en œuvre thread.sleep pour attendre, mais dans les tests, maquette que interface pour éviter thread.sleep . Par exemple: xxx

tests: xxx


0 commentaires

1
votes

Il n'y a probablement aucun moyen de simuler thread.sleep car c'est une méthode statique et ceux-ci ne peuvent pas être moqués de cadres moqueurs dynamicproxy à base de MOQ.

Une option serait d'utiliser le profileur API basé Des outils tels que Microsoft Fakes (uniquement dans VS Enterprise) ou Typemoq Professional.

La meilleure option est de ne pas appeler thread.sleep directement dans votre logique d'entreprise. Ce que vous pouvez faire, c'est d'introduire une interface comme celle-ci xxx

puis créer une implémentation par défaut que vous utilisez dans votre code: xxx

Ajoutez une dépendance d'Isleepservice à votre logique d'entreprise xxx

Vous pouvez ensuite vous moquer facilement de l'isleepservice dans vos tests de votre appareil et transmettez la réelle implémentation dans votre code de production


0 commentaires