Podgląd snippetów w visual studio
Aby zobaczyć wszystkie dostępne snippety w visual studio, kliknij proszę w górnym menu w Tools, a następnie Code Snippets Manager. Możesz również przejść do tego okna skrótem klawiszowym Ctrl + k + b.
Po otworzeniu tego okna wybierz na górze odpowiedni język, to znaczy CSharp. Jeżeli w drzewku rozwiniesz sobie gałąź Visual C#, to zobaczysz wszystkie domyślnie dostępne snippety w visual studio w C#. Oprócz tego interesuje nas jeszcze gałąź My Code Snippets. Prawdopodobnie u Ciebie nie ma tam jeszcze żadnych snippetów, są tam własne snippety, stworzone przez użytkownika, które za chwilę będziemy tworzyć.
Jakiego snippeta będziemy tworzyć
Stworzymy własnego snippeta, który będzie tworzył nam nową metodę testową za pomocą skrótu tm. Czyli zostanie sworzona metoda publiczna void o nazwie domyślnej Method_Scenario_ExpectedBehaviour, czyli zgodna z konwencją pisania testów jednostkowych. Co więcej, klikając w tabulator, będziemy mogli się przełączać pomiędzy 3 członami i łatwo zmieniać ich nazwy. Snippet doda też atrybut [Test] z frameworka NUnit nad metodą oraz doda na górze nowy using NUnit.Framework. Powinien wyśwetlić się taki kod:
using NUnit.Framework;
[Test]
public void Method_Scenario_ExpectedBehaviour()
{
}
Tworzenie własnego snippeta
Na początek skopiuj sobie proszę szablon snippeta:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title></Title>
</Header>
<Snippet>
<Code Language="">
<![CDATA[]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Utwórz sobie nowy plik o nazwie na przykład testmethod.snippet i wklej do niego powyższy szablon. A następnie będziemy uzupełniać kilka sekcji. W sekcji Title wpisz sobie tytuł, może to być Test Method:
<Header>
<Title>Test Method</Title>
</Header>
Następnie uzupełnij skrót, którego chcesz używać, w moim przypadku jest to skrót tm:
<Header>
<Title>Test Method</Title>
<Shortcut>tm</Shortcut>
</Header>
Opcjonalnie możesz też ustawić opis i autora:
<Header>
<Title>Test Method</Title>
<tm</Shortcut>
<Description>Code snippet for a test method</Description>
<Author>Kazimierz Szpin</Author>
</Header>
Ustawiamy, że jest to snippet dla C#
<Snippet>
<Code Language="CSharp">
<![CDATA[]]>
</Code>
</Snippet>
Oraz definiujemy, jak ma wyglądać:
<Snippet>
<Code Language="CSharp">
<![CDATA[[$Test$]
public void $Method$_$Scenario$_$ExpectedBehaviour$()
{
$end$
}]]>
</Code>
</Snippet>
Zauważ, że w kilku miejscach użyłem znaku $, są to zmienne, które jeszcze musimy zdefiniować. Dzięki temu będziemy się mogli przełączać pomiędzy kolejnymi zmiennymi za pomocą tab.
<Snippet>
<Code Language="CSharp">
<![CDATA[[$Test$]
public void $Method$_$Scenario$_$ExpectedBehaviour$()
{
$end$
}]]>
</Code>
<Declarations>
<Literal>
<ID>Method</ID>
<ToolTip>Replace with the name of the test method</ToolTip>
<Default>Method</Default>
</Literal>
<Literal>
<ID>Scenario</ID>
<ToolTip>Replace with the test scenario</ToolTip>
<Default>Scenario</Default>
</Literal>
<Literal>
<ID>ExpectedBehaviour</ID>
<ToolTip>Replace with the test expected behaviour</ToolTip>
<ExpectedBehaviour</Default>
</Literal>
<Literal Editable="false">
<ID>Test</ID>
<Function>SimpleTypeName(global::NUnit.Framework.Test)</Function>
</Literal>
</Declarations>
</Snippet>
Czyli w deklaracji, każdej zmiennej podajemy jej id, czyli to, co użyliśmy w definicji, tooltip to znaczy podpowiedź, opis oraz default, czyli wartość domyślna.
Na koniec przed deklaracjami tych zmiennych dodajemy definicje namespace'ów, które chcemy, żeby zostały dodane. W tym przypadku jest namespace NUnit.Framework:
<Imports>
<Import>
<Namespace>NUnit.Framework</Namespace>
</Import>
</Imports>
Także, cały plik wygląda w ten sposób:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Test Method</Title>
<Shortcut>tm</Shortcut>
<Description>Code snippet for a test method</Description>
<Author>Kazimierz Szpin</Author>
</Header>
<Snippet>
<Imports>
<Import>
<Namespace>NUnit.Framework</Namespace>
</Import>
</Imports>
<Code Language="CSharp">
<![CDATA[[$Test$]
public void $Method$_$Scenario$_$ExpectedBehaviour$()
{
$end$
}]]>
</Code>
<Declarations>
<Literal>
<ID>Method</ID>
<ToolTip>Replace with the name of the test method</ToolTip>
<Default>Method</Default>
</Literal>
<Literal>
<ID>Scenario</ID>
<ToolTip>Replace with the test scenario</ToolTip>
<Default>Scenario</Default>
</Literal>
<Literal>
<ID>ExpectedBehaviour</ID>
<ToolTip>Replace with the test expected behaviour</ToolTip>
<Default>ExpectedBehaviour</Default>
</Literal>
<Literal Editable="false">
<ID>Test</ID>
<Function>SimpleTypeName(global::NUnit.Framework.Test)</Function>
</Literal>
</Declarations>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Zapisz go proszę, tak jak pisałem na początku w pliku testmethod.snippet. Następnie wróć do visual studio i zaimportujemy ten plik. Otwórz ponownie Code Snippets Manager. Na górze wybierz język CSharp. Kliknij przycisk Import.
Wybierz utworzony wcześniej plik o nazwie testmethod.snippet oraz kliknij Finish.
Nowy snippet powinien pojawić się w folderze My Code Snippets.
Kliknij OK, a następnie możesz sprawdzić, czy wszystko działa w porządku. Wpisz tm, a następnie tabulator i powinien Ci się wygenerować taki kod:
[Test]
public void Method_Scenario_ExpectedBehaviour()
{
}
Na górze powinien zostać dodany using NUnit.Framework. Następnie możesz wpisywać pokolei własne nazwy zamiast domyślnych i przełączać się pomiędzy nimi tabulatorem.
PODSUMOWANIE:
Mam nadzieję, że udało Ci się również stworzyć takiego snippeta i wszystko u Ciebie zadziałało bez problemów. Jak widzisz, nie jest to trudne, wystarczy kilka kroków, kilka linijek kodu, by stworzyć własnego snippeta, który w przyszłości może bardzo przyśpieszyć pisanie kodu.
Poprzedni artykuł - 21 Snippetów w Visual Studio, Dzięki Którym Zwiększysz Swoją Produktywność.
Następny artykuł - Jak Tworzyć Nowe Klasy w Visual Studio Domyślnie z Modyfikatorem Public?.