.NET CLI ile projeleri düzenleme ve test etme

Bu öğreticide Öğretici: Visual Studio Code kullanarak .NET ile bir konsol uygulaması oluşturma, gelişmiş ve iyi düzenlenmiş uygulamalar geliştirmek için basit bir konsol uygulaması oluşturmanın ötesine geçmenizi sağlar. Kodunuzu düzenlemek için klasörlerin nasıl kullanılacağını gösterdikten sonra, öğreticide xUnit test çerçevesiyle bir konsol uygulamasının nasıl genişlet kullanılacağı gösterilir.

Not

Bu öğretici, uygulama projesini ve test projesini ayrı klasörlere yerleştirmenizi önerir. Bazı geliştiriciler bu projeleri aynı klasörde tutmayı tercih eder. Daha fazla bilgi için bkz. GitHub sorunu dotnet/docs #26395.

Kodu düzenlemek için klasörleri kullanma

Konsol uygulamasına yeni türler eklemek istiyorsanız, bu türlerdeki dosyaları uygulamaya ekleyerek bunu yapabilirsiniz. Örneğin, projenize içeren ve MonthlyReportRecords türleri içeren AccountInformation dosyalar eklerseniz, proje dosya yapısı düzdür ve kolayca gezinilebilir:

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

Ancak, bu düz yapı yalnızca projenizin boyutu nispeten küçük olduğunda iyi çalışır. Projeye 20 tür eklerseniz ne olacağını hayal edebiliyor musunuz? Projenin kök dizinini alt eden bu kadar çok dosyayla projede gezinmek ve bakımını yapmak kesinlikle kolay olmayacaktır.

Projeyi düzenlemek için yeni bir klasör oluşturun ve tür dosyalarını barındıracak modeller olarak adlandırın. Tür dosyalarını Models klasörüne yerleştirin:

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

Dosyaları mantıksal olarak klasörler halinde gruplandıran projelerde gezinmek ve bakımını yapmak kolaydır. Sonraki bölümde, klasörler ve birim testi ile daha karmaşık bir örnek oluşturacaksınız.

NewTypes Pets Örneğini kullanarak düzenleme ve test etme

Önkoşullar

Örneği oluşturma

Aşağıdaki adımlar için , NewTypes Pets Örneğini kullanarak takip edebilir veya kendi dosya ve klasörlerinizi oluşturabilirsiniz. Türler, daha sonra daha fazla türün eklenmesine izin veren bir klasör yapısında mantıksal olarak düzenlenir ve testler daha sonra daha fazla test eklenmesine izin veren klasörlere mantıksal olarak yerleştirilir.

Örnek, ve Catolmak üzere iki tür Dog içerir ve ortak bir arabirim uygulamalarını sağlar. IPet Proje için NewTypes hedefiniz evcil hayvanla ilgili türleri Bir Evcil Hayvanlar klasöründe düzenlemektir. Daha sonra başka bir tür kümesi eklenirse, örneğin WildAnimals, Pets klasörünün yanında NewTypes klasörüne yerleştirilir. WildAnimals klasörü, ve Rabbit türleri gibi Squirrel evcil hayvan olmayan hayvanlar için türler içerebilir. Bu şekilde türler eklendikçe proje iyi düzenlenmiş durumda kalır.

Belirtilen dosya içeriğiyle aşağıdaki klasör yapısını oluşturun:

/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>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

Aşağıdaki komutu yürütün:

dotnet run

Aşağıdaki çıkışı alın:

Woof!
Meow!

İsteğe bağlı alıştırma: Bu projeyi genişleterek gibi yeni bir Birdevcil hayvan türü ekleyebilirsiniz. Kuşun TalkToOwner yöntemini sahibine verin Tweet! . Uygulamayı tekrar çalıştırın. Çıkış şunları içerir: Tweet!

Örneği test etme

Proje NewTypes yerinde ve evcil hayvanlarla ilgili türleri bir klasörde tutarak projeyi düzenlediniz. Ardından, test projenizi oluşturun ve xUnit test çerçevesiyle test yazmaya başlayın. Birim testi, evcil hayvan türlerinizin düzgün çalıştıklarını onaylamak için davranışları otomatik olarak kontrol etmenizi sağlar.

src klasörüne geri gidin ve içinde NewTypesTests klasörü bulunan bir test klasörü oluşturun. NewTypesTests klasöründen bir komut isteminde komutunu yürütür.dotnet new xunit Bu komut iki dosya üretir: NewTypesTests.csproj ve UnitTest1.cs.

Test projesi şu anda içindeki NewTypes türleri test emiyor ve projeye bir proje başvurusu NewTypes gerektiriyor. Proje başvurusu eklemek için komutunu dotnet add reference kullanın:

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

Alternatif olarak, NewTypesTests.csproj dosyasına bir <ItemGroup> düğüm ekleyerek proje başvuruyu el ile ekleme seçeneğiniz de vardır:

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

NewTypesTests.csproj:

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

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

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

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

</Project>

NewTypesTests.csproj dosyası aşağıdaki paket başvurularını içerir:

  • Microsoft.NET.Test.Sdk, .NET test altyapısı
  • xunit, xUnit test çerçevesi
  • xunit.runner.visualstudio, test çalıştırıcısı
  • NewTypes, test etmek için kod

UnitTest1.cs adını PetTests.cs olarak değiştirin ve dosyadaki kodu aşağıdaki kodla değiştirin:

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);
    }
}

İsteğe bağlı alıştırma: Daha önce sahibine bir Tweet! veren bir Bird tür eklediyseniz, yöntemin tür için doğru çalışıp çalışmadığını TalkToOwner denetlemek için BirdPetTests.cs dosyasına BirdTalkToOwnerReturnsTweetbir test yöntemi ekleyin.

Not

ve değerlerinin expected eşit olmasını bekleseniz de, denetimiyle Assert.NotEqual yapılan ilk onay bu değerlerin eşit olmadığını belirtir.actual Her zaman başlangıçta testin mantığını denetlemek için başarısız olacak bir test oluşturun. Testin başarısız olduğunu onayladıktan sonra, testin geçmesine izin vermek için onaylamayı ayarlayın.

Aşağıda proje yapısının tamamı gösterilmektedir:

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

test/NewTypesTests dizininden başlayın. komutunu kullanarak dotnet test testleri çalıştırın. Bu komut, proje dosyasında belirtilen test çalıştırıcısını başlatır.

Beklendiği gibi test başarısız olur ve konsol aşağıdaki çıkışı görüntüler:

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)

Testlerinizin onaylarını olarak Assert.NotEqualAssert.Equaldeğiştirin:

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);
    }
}

komutuyla dotnet test testleri yeniden çalıştırın ve aşağıdaki çıkışı alın:

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)

Test başarılı oldu. Evcil hayvan türlerinin yöntemleri, sahibiyle konuşurken doğru değerleri döndürür.

xUnit kullanarak projeleri düzenleme ve test etme tekniklerini öğrendinsiniz. Bu teknikleri kendi projelerinize uygulayarak ilerleyin. Kodlamanız kutlu olsun!