Blog Dla Młodszych Programistów C#/.NET

4 sierpnia 2020
W poprzednim artykule opisałem Ci, czym są snippety i jakie są najpopularniejsze snippety domyślnie stworzone w visual studio. Dzisiaj chciałbym Ci pokazać, w jaki sposób stworzyć własnego snippeta, nie jest to nic skomplikowanego, a może bardzo przyśpieszyć pisanie kodu.

Kilka Prostych Kroków Jak Stworzyć Własnego Snippeta w Visual Studio


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.

Code snippet manager

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ć.

Code snippet manager


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.

Code snippet manager import

Wybierz utworzony wcześniej plik o nazwie testmethod.snippet oraz kliknij Finish.

Code snippet manager finish

Nowy snippet powinien pojawić się w folderze My Code Snippets.

Code snippet manager new

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?.
Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
Programista C#/.NET. Głównie pisze aplikacje w ASP.NET MVC, WPF oraz Windows Forms. Specjalizuje się w testach jednostkowych.
Autor bloga ModestProgrammer.pl
Dodaj komentarz
© Copyright 2020 modestprogrammer.pl. Wszelkie prawa zastrzeżone. Polityka prywatności. Design by Kazimierz Szpin