Pourquoi « utilise l'unité » disparaît lorsque j'avais une nouvelle unité?

StackOverflow https://stackoverflow.com/questions/2555259

  •  23-09-2019
  •  | 
  •  

Question

J'ai un projet de test unitaire pour mon application utilisant le cadre DUnit. Ce projet a une unité entourée d'un $IFDEF pour tester les résultats de sortie dans un fichier xml au lieu de l'interface utilisateur graphique ou juste ligne de commande. XML_OUTPUT définie est activé par commutation de la configuration de construction.

program DelphiCodeToDoc_Tests;

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
{$IFDEF XML_OUTPUT}
  XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas',
{$ENDIF}
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...

Cela fonctionne parfaitement. La question commence lorsque j'ajoute une nouvelle unité à ce projet de l'IDE (une nouvelle unité avec « Fichier> Nouveau> Unité »).

Le projet de test est maintenant:

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...
  MyNewUnit in 'IntegrationTests\MyNewUnit.pas';

Comme vous le voyez, le XML_OUTPUT test a disparu ... Chaque fois que je suis l'ajout d'une unité, Delphi IDE supprime ce test.

Savez-vous pourquoi et comment je peux l'éviter?

Était-ce utile?

La solution

Seul le code qui est réellement utilisé est compilé dans votre application de toute façon, normalement, il ne fait pas mal d'avoir des unités dans la clause Uses qui ne sont pas utilisés.

Vous pouvez voir tout le code qui est lié à votre application lorsque vous exécutez le programme au sein de votre IDE. Vous devriez voir les points bleus à côté de tout le code compilé.

La mise en garde est une que vous devriez vérifier la section initialization des unités qui préoccupent. Tout code qui se trouve dans la section d'initialisation est automatiquement incluse simplement en incluant l'unité parce que tout code dans cette section est exécutée dès que l'application démarre. Vous pouvez ajouter votre directive de compilateur dans la section d'initialisation de l'unité, si nécessaire, pour éviter tout code d'initialisation d'être lié et a couru.

Autres conseils

Vous pouvez ajouter une unité proxy au programme principal de contourner ce comportement problématique (dont beaucoup d'entre nous considèrent un bug, pas une caractéristique).

program DelphiCodeToDoc_Tests;

uses
  ...
  XMLTestRunnerProxy,  
  ...

et

unit XMLTestRunnerProxy;

interface

{$IFDEF XML_OUTPUT}
uses
  XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas';
{$ENDIF}

implementation

end.

liste uses du DPR est géré par l'IDE. Malheureusement, il n'y a rien que vous pouvez faire à ce sujet. Officiellement, vous n'êtes pas censé mettre IFDEF au milieu des utilisations du DPR liste car il fera des choses comme cela si vous le faites.

Ce que je ferais est de laisser l'unité XmlTestRunner2 dans le projet, et de mettre les IFDEF l'intérieur de l'appareil lui-même de sorte que si vous ne disposez pas de jeu XML_OUTPUT, il ne compile rien.

Le décapage se produit chaque fois que l'IDE doit modifier la clause UTILISATIONS de la DPR. En utilisant « Enregistrer sous » pour renommer une unité fera la même chose.

Pour tout autour Je crée toujours mes nouvelles unités à l'extérieur comme un fichier texte vide, puis les ajouter à la République populaire démocratique manuellement. Il est un peu plus de travail au début, mais vous ne finissent que les unités, y compris si elles sont nécessaires. A noter également que lorsque cela ne se produit si vous utilisez quoi que ce soit au plus tard Delphi 2005, vous pouvez passer à l'onglet « Historique » au bas de la fenêtre d'édition et copiez le contenu « fichier local » pour obtenir la version avant lorsque l'unité a été ajouté et tout le reste dépouillé.

Et oui, cela est un bug. QC # 6294 spécifiquement, et il est ouvert, donc Embarcadero est au courant de la question.

Envisager d'avoir deux projets. Une fois le code facultatif, un sans. Ensuite, construire selon ce que vous voulez, ou les deux. L'utilisation de groupes de projets, ils fonctionneront très bien.

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