2016-07-25 32 views
3

Um das Testen zu erleichtern, habe ich eine Resharper source template zusammengestellt, um schnell einen Ersatz für eine Klasse mit NSubstitute zu erstellen.Resharper Quellvorlage Hinzufügen leerer Anweisung

[SourceTemplate] 
public static void substitute<T>(this T o, 
    [Macro(Expression = "guessExpectedType()", Editable = -1)] string type) 
    where T : class 
{ 
    //$ o = Substitute.For<$type$>(); 
} 

ein Feld Angenommen, hat private ILogger logger; bereits definiert, das mir logger.sub (ReSharper schlägt vor, die vollständigen Methodennamen von dort) logger = Substitute.For<ILogger>(); zu erzeugen geben kann.

Ich habe immer noch zwei Probleme, die ich nicht herausfinden konnte. Manchmal

1) setzt es eine leere Anweisung vor dem Code ersetzt, das heißt

; 
logger = Substitute.For<ILogger>(); 

Dies scheint zu passieren, wenn es Anweisungen unter der Leitung ersetzt. Resharper schlägt dann vor, dass die leere Anweisung entfernt werden kann. Warum wird das zuerst hinzugefügt und wie kann ich es verhindern?

2) Ermittelt nur den Substitutionstyp, wenn NSsubstitute bereits für die Klasse importiert wurde (using NSubstitute;). Ohne es bekomme ich logger = Substitute.For<object>(); und einen Vorschlag, NSsubstitute zu importieren. Gibt es einen besseren Makroausdruck zum Auflösen des Feldtyps? Gibt es alternativ eine Möglichkeit, den Namespace zu importieren, wenn er nicht bereits importiert wurde?

Antwort

1
  1. Das klingt wie ein Bug - bitte können Sie file an issue
  2. Versuchen einschließlich der Namensraum im kommentierten Code. ReSharper werden Referenzen verkürzen und automatisch den Namespace in der Liste der using Anweisungen an dem Anfang der Datei hinzufügen:

    //$ o = NSubstitute.Substitute.For<$type$>();

+0

2 perfekt gelöst Problem! Vielen Dank! –