Ist das in C # möglich?

8

Ich habe eine Erweiterungsmethode zum Testen, also kann ich das tun:

%Vor%

Die Erweiterungsmethode:

%Vor%

Dies zeigt:

%Vor%

Gibt es einen Hack, den ich ausführen kann, um den Namen der Eigenschaft "BrainsConsumed" aus meiner Erweiterungsmethode zu erhalten? Bonuspunkte wären die Instanzvariable und der Typ Zombie.

UPDATE:

Das neue Shoulder:

%Vor%

und das druckt aus:

%Vor%

Danke allen, besonders. Matt Dotson, das ist großartig. BTW füttern Sie nicht die seidigen Trollleute.

    
whatupdave 07.12.2009, 06:30
quelle

5 Antworten

3

Sie können den Code erhalten, wenn es ein Debug-Build ist, indem Sie einige der Diagnoseklassen verwenden. Da dies für Unit-Tests ist, ist DEBUG wahrscheinlich sinnvoll.

%Vor%

{

%Vor%

}

Für Ihr Beispiel code="steve.BrainsConsumed.ShouldBe (0);"

Offensichtlich sollten Sie diesem Code eine Fehlerüberprüfung hinzufügen, und Sie könnten es wahrscheinlich schneller machen, indem Sie nicht alle Zeilen in der Datei lesen.

    
Matt Dotson 07.12.2009, 07:43
quelle
3

Das Beste, was ich tun kann, wäre:

%Vor%

oder:

%Vor%

oder:

%Vor%

Re:

  

Bonuspunkte wären die Instanzvariable

Wenn Sie Expression<Func<TSource, TValue>> (oder nur Expression<Func<T>> ) verwenden, können Sie relativ einfach den Namen und den Wert der Eigenschaft abrufen. Ich mache ein Beispiel für die Mitte - beachten Sie, dass die erste erfordert einen zusätzlichen Typ für die DSL, aber nichts schweres:

%Vor%

Oder etwas bessere Nachricht:

%Vor%     
Marc Gravell 07.12.2009 06:44
quelle
1

Nein, ich glaube nicht, dass Sie das können.

Nehmen wir an, dass BrainsConsumed eine Ganzzahl ist (die wahrscheinlich aussieht). In diesem Fall wird der Parameter als Wert übergeben. Sie erhalten lediglich eine Kopie der Ganzzahl, die Sie testen. Es hat keinen Namen außer dem im lokalen Bereich (aktuell).

Diese ähnliche Frage könnte klären:

Ermitteln des Variablennamens, der an eine Funktion <übergeben wird / a>

    
Damovisa 07.12.2009 06:42
quelle
0

Leider können Sie zu diesem Zeitpunkt den Namen der Immobilie nicht erhalten. Das Problem ist, dass du den Wert des BrainsConsumed-Felds überträgst und es zu diesem Zeitpunkt einfach keine Verbindung zurück zum Zombie gibt (was deine Methode betrifft, ist es ein Int und es kann nicht herausfinden, wo der Int ursprünglich herkam von).

Das Beste, was ich für Sie herausfinden könnte, ist, dass Environment.StackTrace die relevanten Informationen enthält, seit Sie steve.BrainsConsumed 1 getauft haben (Empfehlen Sie dies nur, wenn Sie versuchen, dies zu tun) Sie erhalten eine Vorstellung davon, was in Ihren Komponententests fehlgeschlagen ist - nicht, wenn der Stack im normalen Programmablauf tatsächlich durchlaufen werden soll.

    
fyjham 07.12.2009 06:37
quelle
0

Damit können Sie es testen, aber Sie erhalten den Namen der Methode nicht.

Sie könnten diese Erweiterung haben:

%Vor%

Mit folgender Nachricht:

%Vor%     
Yuriy Faktorovich 07.12.2009 06:42
quelle

Tags und Links