Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

11

20.01.2009, 19:13

Ja, aber "Download" automatisch mit "Raubkopie" gleichzusetzen ist doch nicht das Gelbe vom Ei. Naja auch egal. Hab es jetzt so gelöst:

- ein neues Projekt von der Vorlage "Test-Projekt" erstellt
- die zu testende Bibliothek eingebunden
- in managed c++ die Tests geschrieben

Funktioniert so weit, einziges Manko ist, dass man keine Bibliotheks-internen Funktionen testen kann.

Aja, kann man noch irgendwie, ohne den Umweg über externe Batchfiles zu gehen, das Ausführen bestimmter Tests als Postbuild-Event festlegen?
<< an dieser Stelle ist eine Signatur verstorben >>

mystery

Treue Seele

Beiträge: 180

Wohnort: Schwarzwald

Beruf: Entwickler/Programmierer

  • Private Nachricht senden

12

20.01.2009, 21:27

Hauptsache dein Unit Test Funktioniert. ;)

Schau mal in die Hilfe vom 2008er Studio wir haben sowas in einem Projekt zusätzlich auch integriert direkt in der Projekt Konfiguration vom Studio. Aber wie derjenige das genau gemacht hat das müßte ich auch erst nachlesen, oder auf der Arbeit schauen. Aber ne Batch brauchst du auf jeden Fall nicht dafür. :roll:
Wer Rechtschreibfehler findet darf sie für seine Sammlung behalten.
Es gibt keine Probleme, nur Lösungen.

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

13

21.01.2009, 14:53

Hm hab schon ne Menge gesucht, aber irgendwie keine Lösung dafür gefunden, außer mit einem externen Programm, das man noch extra installieren muss. Ist auch nicht so dramatisch, wär aber schon cool wenn du vielleicht nachschauen könnest, wie ihr es gelöst habt :)

Was mich viel mehr stört: Wenn ich einen Test debugge und zu einer Stelle komme, wo eine Funktion aus der eigenbunden (zu testenden) Bibliothek verwendet wird, dann kann ich dort nicht reinsteppen. Ich vermute, dass es daran liegt, dass der Test in Managed (Mixed) C++ geschrieben ist, während die Bibliothek Unmanaged C++ ist, könnte das sein? Gibt es eine Möglichkeit, dieses Umstand zu beseitigen?

Vielen Dank im Voraus!
<< an dieser Stelle ist eine Signatur verstorben >>

mystery

Treue Seele

Beiträge: 180

Wohnort: Schwarzwald

Beruf: Entwickler/Programmierer

  • Private Nachricht senden

14

21.01.2009, 15:42

Also eine erste Idee, da ich nicht weiß ob du es eingestellt hast, wäre folgendes:
Gehe in die Konfigurationseigenschaften bei den Projekteigenschaften und dort unter Debugging. Bei Debuggertyp stelle gemischt (System und Verwalteter Code) ein. Wenn es das nicht war melde Dich einfach wieder.

Der Kollege der das gemacht hat muss im Haus sein um Ihn Fragen zu können, er ist leider sehr oft im Ausseneinsatz mal sehen ob ich ihn erwische, Garantieren kann ich da für nix.
Wer Rechtschreibfehler findet darf sie für seine Sammlung behalten.
Es gibt keine Probleme, nur Lösungen.

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

15

21.01.2009, 15:59

Zitat von »"mystery"«

Also eine erste Idee, da ich nicht weiß ob du es eingestellt hast, wäre folgendes:
Gehe in die Konfigurationseigenschaften bei den Projekteigenschaften und dort unter Debugging. Bei Debuggertyp stelle gemischt (System und Verwalteter Code) ein. Wenn es das nicht war melde Dich einfach wieder.


Hat geholfen, danke :D

So, nun habe ich aber wieder ein Problem. Bisher habe ich die Tests nur für eine statische Bibliothek verwendet. Nun wollte ich eben auch Tests für eine DLL erstellen. Also ganz gewöhnlich diesen Code an der entsprechenden Stelle eingefügt:

C-/C++-Quelltext

1
#pragma comment(lib,"../Debug/libnameD.lib")

Nur leider, wenn ich jetzt einen in der Bibliothek definierten Datentyp verwende, bekomme ich beim Ausführen des Tests stets die Fehlermeldung:

Zitat

Der Typ "UnitTests.Testklassenname, Unit Tests" konnte nicht abgerufen werden. Fehler: System.IO.FileNotFoundException: Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E)
bei System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
bei System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
bei System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
bei System.Reflection.Assembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, StackCrawlMark& stackMark)
bei System.Reflection.Assembly.LoadFrom(String assemblyFile)
bei Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.GetType(UnitTestElement unitTest, String type)
bei Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.ResolveMethods().

Eine Idee, woran's liegen könnte?
<< an dieser Stelle ist eine Signatur verstorben >>

mystery

Treue Seele

Beiträge: 180

Wohnort: Schwarzwald

Beruf: Entwickler/Programmierer

  • Private Nachricht senden

16

21.01.2009, 16:17

Also der Fehlerhinweis setckt bei deiner Fehlermeldung in der ersten Zeile.

Zitat von »"the [V«

oid"]Der Typ "UnitTests.Testklassenname, Unit Tests" konnte nicht abgerufen werden. Fehler: System.IO.FileNotFoundException: Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E)


Diesmal nur ein Tipp du willst ja auch bestimmt was Lernen und nicht alles vorgekaut bekommen. Fehlersuche ist eine Wissenschaft für sich.

Tipp: Der findet das Modul(Vielleicht die DLL?), die Datei mit der aufzurufenden Routinen nicht. :roll:
Wer Rechtschreibfehler findet darf sie für seine Sammlung behalten.
Es gibt keine Probleme, nur Lösungen.

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

17

21.01.2009, 16:25

Ja das habe ich mir auch schon gedacht, dass er die DLL nicht findet. Nur verstehe ich nicht, wie das sein kann, wenn die DLL im selben Verzeichnis liegt, wie die DLL, die vom UnitTests-Projekt erstellt wird. Liegt nämlich beides in /Debug. Daher habe ich die Idee auch wieder verworfen gehabt ;)

Übrigens tritt der gleiche Fehler auch auf, wenn ich die einzubindende DLL nach Windows/System32 kopiere. Und dort schaut der ja immer nach, wenn ich mich recht entsinne.

EDIT 1: Mal so ne Frage, woher weiß der eigentlich, wie die DLL heißt, die er einbinden soll? Weil den Namen der DLL gebe ich ja nirgens an O_o

EDIT 2: Ich denke jetzt darüber nach, die DLL für die Tests als statische Bibliothek zu kompilieren. Muss ich dafür ein neues Projekt anlegen, oder kann man es irgendwie einstellen, dass sowohl eine dynamische als auch eine statische Bibliothek von denselben Sources kompiliert wird? Hab dazu leider nichts gufunden.

EDIT 3: Ich habe eben einfach mal etwas mit den Projekteinstellungen rumgespielt und so die betreffende DLL unter "Eingabe > Verzögert geladene DLLs" hinzugefügt. Seltsamerweise ließen sich die Tests danach schonmal ausführen, allerdings bekam ich eine mir nichtssagende Fehlermeldung an der Stelle, wo ein in der DLL definierte Datentyp erstmals verwendet wird. So weit ich der Doku jedoch entnehmen konnte, ist diese Compileroption Nichts was mir wirklich weiterhelfen könnte.
<< an dieser Stelle ist eine Signatur verstorben >>

mystery

Treue Seele

Beiträge: 180

Wohnort: Schwarzwald

Beruf: Entwickler/Programmierer

  • Private Nachricht senden

18

22.01.2009, 00:15

Das Problem ist das in deiner zweiten Version deine Unit Tests keine exe erzeugt welche dann die zu testende DLL Aufrufen kann.

Das ist die Datei welche er nicht finden kann beim Debuggen.

Versuche das Problem mit diesem Hinweis jetzt zu lösen ich habe leider keine Zeit dafür. :roll:
Wer Rechtschreibfehler findet darf sie für seine Sammlung behalten.
Es gibt keine Probleme, nur Lösungen.

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

19

22.01.2009, 02:40

Hi, erstmal danke für die rasche Antwort. Aber was meinst du mit der "zweiten Version"? Und wenn ich mir einen funktionierenden Test ansehe, dann wird da beim Kompilieren des Tests auch keine exe generiert? O_o Ich kann jedenfalls im Projektmappenverzeichnis bzw. einem Unterverzeichnis davon keine exe Dateien finden.
<< an dieser Stelle ist eine Signatur verstorben >>

mystery

Treue Seele

Beiträge: 180

Wohnort: Schwarzwald

Beruf: Entwickler/Programmierer

  • Private Nachricht senden

20

22.01.2009, 09:54

Zitat

So, nun habe ich aber wieder ein Problem. Bisher habe ich die Tests nur für eine statische Bibliothek verwendet. Nun wollte ich eben auch Tests für eine DLL erstellen. Also ganz gewöhnlich diesen Code an der entsprechenden Stelle eingefügt:


Das meine ich mit Wechsel von 1. auf 2. Version. Zuerst statische Bibliothek und dann umstellen auf Tests für eine DLL. Das erste Problem hatten wir gelöst. ;)

EDIT:
_______________________________________________________________

Erstmal Entschuldigung bitte, eine .EXE also ne Ausführbare Datei wird nicht benötigt war ein Denkfehler von mir.

Ich kann erst heute Abend schauen in deinen Code aber mir fällt gerade ein benutzt du die Compiler Option /clr? Wenn nicht wird es nicht Funktionieren weil beim Mixed Mode das unbedingt eingestellt werden muss.

Unter Konfigurationseigenschaften -> Common Language Runtime-Unterstützung: "Sichere MSIL Common Language Runtime-Unterstützung (/clr:safe)"
so einstellen. Das ist sehr wichtig und wird gerne vergessen und für C++ nötig. Probier dann noch mal mit dieser Einstellung. Falls dann noch Probleme sind finden wir das auch noch raus aber immer schön der Reihe nach wir bekommen das schon hin keine Sorge. Melde bitte ob es geklappt hat, wenn nicht schaue ich mir das Projekt noch mal an. :roll:
Wer Rechtschreibfehler findet darf sie für seine Sammlung behalten.
Es gibt keine Probleme, nur Lösungen.

Werbeanzeige