web-dev-qa-db-fra.com

Visual Studio Express 2013: Sortie du programme dans les tests unitaires (console, débogage, etc.)

Je frappe vraiment ma tête contre le mur ici. Est-il si difficile d'obtenir une sortie de programme dans Visual Studio (Express 2013)? Lors de l'écriture de code, je trouve absolument essentiel de pouvoir imprimer les valeurs des variables, des opérations, etc. pendant le travail et le dépannage. 

En Java et Eclipse, System.out.println () fonctionne toujours, en imprimant sur la console IDE. Quand j'écris des programmes en C, j'utilise toujours la console, donc rien ne pose problème. Cependant, dans VS Express 2013, il semble que je ne puisse obtenir aucune sortie.

Le problème peut-il être lié au fait que j'écris des tests unitaires et non des programmes exécutables "normaux"? Si tel est le cas, existe-t-il un moyen pour que VS affiche la sortie du programme dans les classes de tests unitaires? J'ai essayé d'utiliser debug, mais cela ne montre rien non plus. Pensant qu'il y a un problème de configuration, j'ai cherché des solutions aux messages de débogage non affichés, mais aucune des options que j'ai trouvées (ici ou ailleurs) ne semble pouvoir vous aider.

Ou bien sûr, s'il existe une autre méthode couramment utilisée pour vérifier les valeurs de programme, la sortie, etc. lors de l'écriture de code dans VS/C #, j'aimerais en entendre parler :-)

Quelqu'un a une idée? Et s'il vous plaît, si la question est trop peu claire ou quelque chose, dites-le-moi et je vais résoudre le problème.

NB: J'utilise des classes de tests unitaires pour les tests fonctionnels, au cas où quelqu'un voudrait indiquer ce que je devrais faire et ne pas faire avec les tests unitaires.

EDIT 1: J'ai oublié de mentionner que je ne suis pas en mesure d'exécuter le code avec "Start: Debug". Si j'essaie, j'obtiens l'erreur suivante: "Un projet avec un type de sortie de bibliothèque de classes ne peut pas être démarré directement." (Le projet de test unitaire utilise des classes dans un autre projet, qui est un projet de bibliothèque de classes.) Ceci, bien sûr, car je n’ai pas de projet exécutable dans la solution. La façon dont je l'exécute consiste à exécuter le test sélectionné à partir de l'Explorateur de tests.

EDIT 2: Code:

using System;
using System.Diagnostics;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WordpressAutomation;

namespace WordpressTests
{

    [TestClass]
    public class LoginTests : WordpressTest {

        [TestMethod]
        public void AdminUserCanLogIn() {

            System.Diagnostics.Debug.WriteLine("Something...");
            System.Diagnostics.Trace.WriteLine("Something...");
        }
    }
}
15
Frank H.

Je n'aime pas trop répondre à ma propre question, car cela me semble un peu "malhonnête". Cependant, la situation est calme depuis un moment et je ne pense pas qu'il y ait d'autres réponses.

La solution la plus pratique consiste à créer un autre projet, par exemple un projet de console, dans lequel vous créez toutes les sorties. Il se peut qu'il ne communique pas directement avec les tests unitaires, mais comme le cadre de test que je développe dans cet exemple spécifique consiste en des tests fonctionnels s'adressant à des bibliothèques de classes, il est possible d'utiliser un projet distinct dans la solution.

Donc, pour résumer, la solution consiste à: - un projet de test unitaire, avec les tests réels - un projet de bibliothèque de classes avec la logique-cadre - un projet de console pour tester des classes dans la bibliothèque de classes ou des classes de tests non unitaires dans le projet de test unitaire.

4
Frank H.

TestExplorer de Visual Studio a une fenêtre de sortie séparée. Il n'écrit pas dans la sortie par défaut de Visual Studio (je ne sais pas si c'est configurable)

Vous devez sélectionner le test dont vous souhaitez voir la sortie dans TestExplorer. Si Test a une sortie, vous devriez voir un hyperlien "Sortie". En cliquant dessus, vous ouvrez un nouvel onglet affichant le résultat du test.

 enter image description here

Les messages affichés sont tous écrits par Console.WriteLine.

J'utilise Visual Studio 2013 Professional. Je ne suis pas sûr que la version Express fonctionne différemment.

34
Jehof
System.Diagnostics.Debug.WriteLine("Yay!");

Si vous configurez votre fenêtre de sortie pour afficher les données de débogage, cela s'affiche.

Source: Visual Studio 2010 Express. Écrivez dans la fenêtre de sortie (C'est pour VS 2010, mais cela devrait également s'appliquer à 2013 puisqu'il s'agit d'une option du cadre, pas d'une option IDE).

6
Nzall

Je crois que vous devriez utiliserlog, pas de sortie console pour une situation comme celle-ci. Vous pouvez configurer le journal pour générer dans un fichier, ou même dans une fenêtre que vous avez spécifiée. Je pense que vous pouvez utiliser log pour des situations sans console et vous pouvez configurer votre journal de manière à ce que seuls des avertissements ou des erreurs apparaissent en production et que les informations de débogage puissent être affichées pendant votre session de débogage.

J'utilise log4j , tout bon logiciel de journalisation peut être utilisé ici.

2
Herbert Yu

Vous devriez utiliser un cadre de journalisation pour faire ce genre de chose. À partir de la structure de journalisation, vous pouvez choisir de vous connecter à la console, à un fichier plat ou à de nombreux autres récepteurs de données, ou vous pouvez indiquer à la structure d’ignorer l’entrée. Les bonnes structures de journalisation sont extrêmement configurables.

Sur la Terre .NET, le favori de la communauté semble être NLog, http://nlog-project.org/ . Le lien "Getting Started" vous permettra de commencer.

1
morningstar8

Je ne suis pas sûr à propos de VS2013, mais dans VS2008, si vous double-cliquez sur le résumé du résultat du test (une fois le test terminé, que le test soit réussi ou non), une fenêtre contenant "Résultats communs", "Message d'erreur", etc. s'ouvrira. suivi à la fin de "Sortie de console standard". En gros, cela permet de capturer individuellement la sortie de la console pour chaque test. Le seul inconvénient est qu'il ne montre pas la sortie en temps réel. Il ne le montrera qu'une fois terminé.

0
Mark Lakata

Un projet avec un type de sortie de bibliothèque de classes ne peut pas être démarré directement

On ne lance pas et ne débogue pas un projet de test unitaire. On initie une session de test en sélectionnant 1 ou plusieurs tests dans la fenêtre Test Explorer. Ou sur une méthode de test unitaire en faisant un clic droit et en sélectionnant Run Tests ou Debug Tests

Utilisez Console.WriteLine ou Debug.WriteLine pour générer les messages d’information nécessaires et recherchez-les dans le lien Output dans les résultats du test unitaire.

0
ΩmegaMan