Po przeczytaniu wcześniejszych notatek wiemy już, jak przygotować nasz pierwszy program „HelloWorld” i znamy jego kod. Teraz czas na ostatni brakujący element – wynik kompilacji, czyli projekt.
Możemy myśleć o projekcie jako o rodzaju „skoroszycie”, które przechowuje informacje o plikach oraz sposobie ich budowania. Projekt generuje produkt końcowy, którym może być plik wykonywalny lub biblioteka. W przypadku tworzenia strony WWW, celem będzie zbiór plików umożliwiających jej udostępnienie. W zależności od używanego języka, projekt może mieć różne rozszerzenia. Dla projektu C#, będzie to .csproj, który domyślnie ma strukturę XML.
W realnych scenariuszach często pracujemy nad wieloma projektami jednocześnie, np. aplikacjami przeznaczonymi na różne systemy lub z różnymi interfejsami użytkownika. Dobra praktyka podpowiada, aby wyodrębnić wspólne komponenty, umożliwiając ich wielokrotne użycie. Tutaj z pomocą przychodzi solucja (plik .sln) – jest to plik tekstowy, który łączy różne projekty. W katalogu solucji znajdziemy także plik .suo, który jest plikiem binarnym zawierającym ustawienia Visual Studio. Dzięki niemu, po ponownym otwarciu, Visual Studio pamięta, które pliki były edytowane i gdzie skończyliśmy pracę.
Przejdźmy do praktyki. Aby utworzyć nowy projekt, kliknij w Create a new project na głównej stronie lub wybierz z menu File / New / Project. Możesz również użyć skrótu Ctrl + Shift + N.
Zacznijmy od wyboru typu projektu. W lewej części ekranu znajdziesz drzewko, które umożliwia wybór rodzaju projektu według języka i typu. Wybierz Visual C#, a potem Classic Desktop. Następnie wybierz Console Application, idealny dla naszej aplikacji HelloWorld. W dolnej części okna znajduje się pole Name, które określa nazwę pliku projektu. Możesz także zdecydować, czy projekt ma być umieszczony w osobnym katalogu dla solucji, wybierając opcję Create directory for solution. Po ustawieniu wszystkiego, kliknij OK.
W ten sposób przygotowaliśmy solucję wraz z projektem. Teraz w Visual Studio zobaczysz okno z kodem pliku Program.cs oraz Solution Explorer z strukturą solucji. Oprócz tych elementów, zauważysz również węzeł Properties z plikiem AssemblyInfo.cs, który zawiera informacje o aplikacji, oraz węzeł References z powiązaniami do innych projektów lub bibliotek. Teraz wystarczy przenieść kod programu HelloWorld i gotowe! Kompiluj i uruchamiaj, klikając zieloną strzałkę Start lub używając skrótu F5.
Dobra praktyka nakazuje tworzenie testów. Chociaż nasz program wyświetla tylko napis „Hello world C#”, warto sprawdzić jego działanie. Dodajmy więc projekt testowy, postępując zgodnie z instrukcjami na ekranie Solution Explorer. Kolejnym krokiem będzie dodanie odwołania do projektu HelloWorld, aby umożliwić przeprowadzenie testów.
Po utworzeniu projektu testowego, naszym zadaniem będzie sprawdzenie, czy program wyświetlił „Hello world C#”. W tym celu użyjemy Console.SetOut
, aby przekierować strumień danych na obiekt StringWriter
. Należy również zmienić modyfikatory dostępu klasy Program i metody Main na public
, aby umożliwić testowanie. Usuń również linię Console.ReadLine();
, aby program nie zatrzymywał się automatycznie.
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace HelloWorldUnitTest
{
[TestClass]
public class UnitTest
{
private string _result;
[TestInitialize]
public void Initialize()
{
// Przygotowanie środowiska testowego
var w = new System.IO.StringWriter();
Console.SetOut(w);
HelloWorld.Program.Main(null);
_result = w.GetStringBuilder().ToString();
}
[TestMethod]
public void ValidHelloWorld()
{
// Testowanie wyniku
Assert.AreEqual("Hello world C#", _result);
}
}
}
W ten sposób przygotowaliśmy klasę UnitTest z dwiema metodami: Initialize oraz ValidHelloWorld. Teraz wystarczy uruchomić testy z Test Explorer i zobaczyć wyniki. Czy test zakończy się sukcesem?
Test zakończył się niepowodzeniem. Powód? Metoda WriteLine
dodaje na końcu znak przejścia do nowej linii. Możemy to naprawić, używając metody Write
lub dodając Environment.NewLine
do porównywanego tekstu.
Chcesz pobrać przygotowaną solucję? Pobierz
Troska Robert