Baca dalam bahasa Inggris

Bagikan melalui


Mengatur dan menguji proyek dengan .NET CLI

Tutorial ini mengikuti Tutorial: Membuat aplikasi konsol dengan .NET menggunakan Visual Studio Code, membawa Anda melampaui pembuatan aplikasi konsol sederhana untuk mengembangkan aplikasi canggih dan terorganisir dengan baik. Setelah menunjukkan kepada Anda cara menggunakan folder untuk mengatur kode Anda, tutorial menunjukkan kepada Anda cara memperluas aplikasi konsol dengan kerangka kerja pengujian xUnit .

Catatan

Tutorial ini merekomendasikan agar Anda menempatkan proyek aplikasi dan menguji proyek di folder terpisah. Beberapa pengembang lebih suka menyimpan proyek-proyek ini di folder yang sama. Untuk informasi selengkapnya, lihat Masalah GitHub dotnet/docs #26395.

Menggunakan folder untuk menata kode

Jika Anda ingin memperkenalkan jenis baru ke dalam aplikasi konsol, Anda dapat melakukannya dengan menambahkan file yang berisi jenis ke aplikasi. Misalnya, jika Anda menambahkan file yang berisi AccountInformation dan MonthlyReportRecords jenis ke proyek Anda, struktur file proyek datar dan mudah dinavigasi:

/MyProject
|__AccountInformation.cs
|__MonthlyReportRecords.cs
|__MyProject.csproj
|__Program.cs

Namun, struktur datar ini hanya berfungsi dengan baik ketika ukuran proyek Anda relatif kecil. Dapatkah Anda membayangkan apa yang akan terjadi jika Anda menambahkan 20 jenis ke proyek? Proyek ini pasti tidak akan mudah dinavigasi dan dipelihara dengan banyak file yang mengacaukan direktori root proyek.

Untuk menata proyek, buat folder baru dan beri nama Model untuk menyimpan file jenis. Tempatkan file jenis ke dalam folder Model :

/MyProject
|__/Models
   |__AccountInformation.cs
   |__MonthlyReportRecords.cs
|__MyProject.csproj
|__Program.cs

Proyek yang secara logis mengelompokkan file ke dalam folder mudah dinavigasi dan dikelola. Di bagian berikutnya, Anda membuat contoh yang lebih kompleks dengan folder dan pengujian satuan.

Pengorganisasian dan pengujian menggunakan Sampel Hewan Peliharaan NewTypes

Prasyarat

Membangun sampel

Untuk langkah-langkah berikut, Anda dapat mengikuti dengan menggunakan contoh NewTypes Pets atau membuat file dan folder Anda sendiri. Jenisnya secara logis diatur ke dalam struktur folder yang mengizinkan penambahan lebih banyak jenis nanti, dan pengujian juga ditempatkan secara logis di folder yang memungkinkan penambahan lebih banyak pengujian nanti.

Sampel berisi dua jenis, Dog dan Cat, dan mengimplementasikan antarmuka umum, IPet. Untuk proyek ini NewTypes , tujuan Anda adalah mengatur jenis terkait hewan peliharaan ke dalam folder Hewan Peliharaan . Jika sekumpulan jenis lain ditambahkan nanti, seperti WildAnimals, itu ditempatkan di folder NewTypes bersama dengan folder Pets. Folder WildAnimals mungkin berisi jenis untuk hewan yang bukan hewan peliharaan, seperti Squirrel jenis dan Rabbit . Dengan cara ini, saat jenis-jenis ditambahkan, proyek tetap tersusun dengan baik.

Buat struktur folder berikut dengan konten file yang ditunjukkan:

/NewTypes
|__/src
   |__/NewTypes
      |__/Pets
         |__Dog.cs
         |__Cat.cs
         |__IPet.cs
      |__Program.cs
      |__NewTypes.csproj

IPet.cs:

using System;

namespace Pets
{
    public interface IPet
    {
        string TalkToOwner();
    }
}

Dog.cs:

using System;

namespace Pets
{
    public class Dog : IPet
    {
        public string TalkToOwner() => "Woof!";
    }
}

Cat.cs:

using System;

namespace Pets
{
    public class Cat : IPet
    {
        public string TalkToOwner() => "Meow!";
    }
}

Program.cs:

using System;
using Pets;
using System.Collections.Generic;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            List<IPet> pets = new List<IPet>
            {
                new Dog(),
                new Cat()
            };

            foreach (var pet in pets)
            {
                Console.WriteLine(pet.TalkToOwner());
            }
        }
    }
}

NewTypes.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

Jalankan perintah berikut:

dotnet run

Dapatkan output berikut:

Woof!
Meow!

Latihan opsional: Anda dapat menambahkan jenis hewan peliharaan baru, seperti Bird, dengan memperluas proyek ini. Buat metode burung TalkToOwner memberikan Tweet! kepada pemiliknya. Jalankan aplikasi lagi. Hasil akan mencakup Tweet!

Menguji sampel

Proyek NewTypes ini telah diterapkan, dan Anda telah mengaturnya dengan menyimpan jenis-jenis yang terkait hewan peliharaan dalam folder. Selanjutnya, buat proyek pengujian Anda dan mulai tulis pengujian dengan kerangka kerja pengujian xUnit . Pengujian unit memungkinkan Anda untuk secara otomatis memeriksa perilaku jenis hewan peliharaan Anda untuk mengonfirmasi bahwa mereka beroperasi dengan benar.

Navigasi kembali ke folder src dan buat folder uji dengan folder NewTypesTests di dalamnya. Pada prompt perintah dari folder NewTypesTests , jalankan dotnet new xunit. Perintah ini menghasilkan dua file: NewTypesTests.csproj dan UnitTest1.cs.

Proyek pengujian saat ini tidak dapat menguji jenis-jenis di NewTypes dan memerlukan referensi proyek ke proyek NewTypes. Untuk menambahkan referensi proyek, gunakan dotnet reference add perintah :

dotnet reference add ../../src/NewTypes/NewTypes.csproj

Atau, Anda juga memiliki opsi untuk menambahkan referensi proyek secara manual dengan menambahkan simpul <ItemGroup> ke file NewTypesTests.csproj :

<ItemGroup>
  <ProjectReference Include="../../src/NewTypes/NewTypes.csproj" />
</ItemGroup>

NewTypesTests.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
    <PackageReference Include="xunit" Version="2.8.1" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.8.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="../../src/NewTypes/NewTypes.csproj"/>
  </ItemGroup>

</Project>

File NewTypesTests.csproj berisi referensi paket berikut:

  • Microsoft.NET.Test.Sdk, infrastruktur pengujian .NET
  • xunit, kerangka kerja pengujian xUnit
  • xunit.runner.visualstudio, pengelola uji
  • NewTypes, kode yang akan diuji

Ubah nama UnitTest1.cs menjadi PetTests.cs dan ganti kode dalam file dengan kode berikut:

using System;
using Xunit;
using Pets;

public class PetTests
{
    [Fact]
    public void DogTalkToOwnerReturnsWoof()
    {
        string expected = "Woof!";
        string actual = new Dog().TalkToOwner();

        Assert.NotEqual(expected, actual);
    }

    [Fact]
    public void CatTalkToOwnerReturnsMeow()
    {
        string expected = "Meow!";
        string actual = new Cat().TalkToOwner();

        Assert.NotEqual(expected, actual);
    }
}

Latihan opsional: Jika Anda menambahkan tipe Bird sebelumnya yang menghasilkan Tweet! bagi pemilik, tambahkan metode pengujian ke file PetTests.cs, BirdTalkToOwnerReturnsTweet, untuk memeriksa apakah metode TalkToOwner berfungsi dengan benar untuk tipe Bird tersebut.

Catatan

Meskipun Anda mengharapkan bahwa nilai-nilai expected dan actual sama, pernyataan awal dengan pemeriksaan menggunakan Assert.NotEqual menentukan bahwa nilai-nilai ini tidak sama. Selalu mulai dengan membuat uji coba yang akan gagal untuk memeriksa logika tes. Setelah Anda mengonfirmasi bahwa pengujian gagal, sesuaikan pernyataan untuk memungkinkan pengujian lulus.

Berikut ini memperlihatkan struktur proyek lengkap:

/NewTypes
|__/src
   |__/NewTypes
      |__/Pets
         |__Dog.cs
         |__Cat.cs
         |__IPet.cs
      |__Program.cs
      |__NewTypes.csproj
|__/test
   |__NewTypesTests
      |__PetTests.cs
      |__NewTypesTests.csproj

Mulai di direktori test/NewTypesTests . Jalankan pengujian dengan dotnet test perintah . Perintah ini memulai runner pengujian yang ditentukan dalam file proyek.

Seperti yang diharapkan, pengujian gagal, dan konsol menampilkan output berikut:

Test run for C:\Source\dotnet\docs\samples\snippets\core\tutorials\testing-with-cli\csharp\test\NewTypesTests\bin\Debug\net5.0\NewTypesTests.dll (.NETCoreApp,Version=v5.0)
Microsoft (R) Test Execution Command Line Tool Version 16.8.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.50]     PetTests.DogTalkToOwnerReturnsWoof [FAIL]
  Failed PetTests.DogTalkToOwnerReturnsWoof [6 ms]
  Error Message:
   Assert.NotEqual() Failure
Expected: Not "Woof!"
Actual:   "Woof!"
  Stack Trace:
     at PetTests.DogTalkToOwnerReturnsWoof() in C:\Source\dotnet\docs\samples\snippets\core\tutorials\testing-with-cli\csharp\test\NewTypesTests\PetTests.cs:line 13

Failed!  - Failed:     1, Passed:     1, Skipped:     0, Total:     2, Duration: 8 ms - NewTypesTests.dll (net5.0)

Ubah pernyataan pengujian Anda dari Assert.NotEqual menjadi Assert.Equal:

using System;
using Xunit;
using Pets;

public class PetTests
{
    [Fact]
    public void DogTalkToOwnerReturnsWoof()
    {
        string expected = "Woof!";
        string actual = new Dog().TalkToOwner();

        Assert.Equal(expected, actual);
    }

    [Fact]
    public void CatTalkToOwnerReturnsMeow()
    {
        string expected = "Meow!";
        string actual = new Cat().TalkToOwner();

        Assert.Equal(expected, actual);
    }
}

Jalankan ulang pengujian dengan dotnet test perintah dan dapatkan output berikut:

Test run for C:\Source\dotnet\docs\samples\snippets\core\tutorials\testing-with-cli\csharp\test\NewTypesTests\bin\Debug\net5.0\NewTypesTests.dll (.NETCoreApp,Version=v5.0)
Microsoft (R) Test Execution Command Line Tool Version 16.8.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.

Passed!  - Failed:     0, Passed:     2, Skipped:     0, Total:     2, Duration: 2 ms - NewTypesTests.dll (net5.0)

Pengujian berhasil. Metode tipe hewan peliharaan mengembalikan nilai yang benar saat berinteraksi dengan pemiliknya.

Anda telah mempelajari teknik untuk mengatur dan menguji proyek menggunakan xUnit. Lanjutkan dengan teknik ini menerapkannya dalam proyek Anda sendiri. Selamat pemrograman!


Sumber Daya Tambahan:

Pelatihan

Modul

Pengujian C# di Visual Studio - Training

Mulailah menguji aplikasi C# Anda dengan menggunakan alat pengujian di Visual Studio. Pelajari cara menulis pengujian, menggunakan Test Explorer, membuat rangkaian pengujian, dan menerapkan pola merah, hijau, refaktor untuk menulis kode.

Sertifikasi

Bersertifikat Microsoft: Azure Developer Associate - Certifications

Bangun solusi end-to-end di Microsoft Azure untuk membuat Azure Functions, menerapkan dan mengelola aplikasi web, mengembangkan solusi yang menggunakan penyimpanan Azure, dan banyak lagi.