2009-02-10 10 views
0

J'essaie d'exécuter un ensemble de cas de test via l'une de nos applications internes. J'ai besoin d'être capable d'automatiser ces tests et de les exécuter via la ligne de commande et de consigner diverses choses. Le problème est que le code existant ne sépare pas la vue du contrôleur et renvoie MessageBoxes et Alertes partout où l'utilisateur clique sur un bouton (dans mon cas, OK/CONTINUE). Actuellement, il a été décidé d'introduire des indicateurs d'état qui aideront à déterminer le contexte à partir duquel l'application est en cours d'exécution afin que l'on puisse décider de faire un Console.WriteLine() ou un MessageBox.Show(). Mais comme vous pouvez l'imaginer, cela a entraîné de nombreux changements et des blocages d'if-else. Malheureusement, il ne semble pas possible de s'asseoir et de séparer la logique de la vue à ce stade. Donc je me demandais s'il y avait un moyen de détecter le contexte dans lequel l'application s'exécute. Je voudrais remplacer chacun de l'appel MessageBox() avec un appel Notify() qui lui-même peut détecter le contexte - si montrer la sortie sur une invite de commande ou faire apparaître un formulaire.Comment détecter le contexte à partir duquel une application est en cours d'exécution? Que ce soit à partir de l'invite de commande ou d'un formulaire Windows

EDIT_1: Toutes autres suggestions pour ce faire sont également les bienvenues.

Répondre

0

Dans mon application, j'analyse les arguments de ligne de commande et définissez des indicateurs internes. Si vous ajoutez ce type d'analyse au point d'entrée de votre application, l'existance de l'argument de ligne de commande étant réglé sur "Y" par exemple, vous pouvez définir l'indicateur approprié dans l'application utilisée pour déterminer où la sortie est envoyée.

Personnellement, je capture toute la sortie "STDOUT" (console) dans un fichier journal, puis si je ne cours pas en mode "planifié", j'ouvre un msgbox().

0

En C en utilisant l'API Win32 (du haut de ma tête, non testé):

// requires Windows 2000 or later (for GetConsoleWindow) 
int parent_owns_the_console() 
{ 
    DWORD pid=0; 
    GetWindowThreadProcessId(GetConsoleWindow(), &pid); 
    return pid && pid != GetCurrentProcessId(); 
}