Question

Mon programme a une routine quotidienne, semblable à un événement de réveil. Dis, quand il est 14 heures (L'heure est l'heure du système dans mon pc), faire quelque chose pour moi.

Ce que je veux faire est d'accélérer la période d'essai (je ne veux pas vraiment attendre 4 jours regardant la routine quotidienne et vérifier les erreurs.) Je lis sur wiki de objet Mock, l'écrivain SAVIEZ programme réveil mention. J'étais tellement heureux de voir, mais encore, ne savent pas comment le faire.

Je suis nouveau à Mock Object, et je suis la programmation en Java. Alors JMock ou EasyMock (ou tout autre) pourrait bien pour moi.

Merci

Était-ce utile?

La solution

Chaque fois que vous devez obtenir l'heure actuelle, ne pas utiliser l'horloge système directement - utiliser une interface telle que:

public interface Clock
{
    long currentMillis();
}

Vous pouvez ensuite mettre en œuvre ce avec une horloge de système pour la production, et passer un faux pour les tests, où vous pouvez définir le faux à tout moment.

Cependant, vous aurez également besoin de se moquer de tout sur le fonctionnement de vos système - que vous attendez explicitement un moment donné, ou fait autre chose appeler votre code

Autres conseils

Je dois présenter des excuses puisque vous avez posé des questions sur java et je suis sorti pour le déjeuner quand il s'agit de java, mais une solution consiste à se moquer de l'objet DateTime et régler le temps désiré.

Dans .NET, il ressemblerait à quelque chose comme ceci:

public static class SystemTime
{
    public static Func<DateTime> Now = () => DateTime.Now;
}

SystemTime.Now = () => new DateTime(2000,1,1);

De: Traiter le temps dans les essais


  

... [A] programme de réveil n qui provoque une   cloche à sonner à un certain moment pourrait   obtenir l'heure actuelle de l'extérieur   monde. Pour tester cela, le test doit   attendre que le temps d'alarme pour savoir   si elle a sonné   correctement. Si on utilise un objet fantaisie   lieu de l'objet réel, il peut être   programmé pour fournir la cloche sonne   le temps (si elle est réellement ce moment-là   ou non) de telle sorte que le réveil   programme peut être testé en vase clos.

Ce réveil vous faites référence est un exemple de donner un objet moqueur. Elle ne fait pas un objet que vous pouvez utiliser dans le cadre de simulation.

En fait ce que vous faites dans le test est faux événements d'horloge. Exactement comment dépend un peu de la conception, et la façon dont vous attendez l'événement, mais de rester simple (sinon pur) mon approche serait d'avoir une méthode qui est appelée lorsque l'événement de temps est déclenché, puis tester les deux côtés de cela.

La première consiste à tester d'appeler la méthode et de voir que l'événement chronométré fait ce que vous attendez. Puis se moquer de cette classe (avec JMock la façon préférée est d'en faire une interface et votre méthode d'appel mise en œuvre de cette interface).

Vous passez ensuite la maquette à la classe qui gère le calendrier. Là encore, je abstrait le filetage / déclenchants questions (telles que la vérification de l'horloge du système et le démarrage du fil) et ont des simulacres renvoient des valeurs qui vont essentiellement l'événement tout de suite.

Ensuite, maintenez le code réel qui lit réellement l'horloge du système et démarre le fil le plus petit possible, et ce sera la zone qui ne relève pas de test unitaire.

Mocking concerne les tests unitaires. Pour la fonctionnalité que vous décrivez, je séparerais la gâchette (dans votre cas l'événement de réveil) du processus (quoi que ce soit votre « routine quotidienne » fait) et test unitaire la fonctionnalité de processus.

Alors votre attention sur le code de programmation qui invoquera la fonctionnalité de votre processus. Je recommande d'utiliser quelque chose comme Quartz pour cela, mais si vous allez rôle votre -own le test unitaire pour qu'il puisse fonctionner avec l'horloge du système réel à condition que vous attribuez le temps de déclenchement en fonction de la valeur actuelle de l'horloge du système que tout ce que vous allez tester pour est que l'événement déclencheur se produit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top