.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
- .NET 5.0 SDK veya sonraki bir sürüm.
Ö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 Cat
olmak ü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>net8.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 Bird
evcil 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>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>
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 Bird
PetTests.cs dosyasına BirdTalkToOwnerReturnsTweet
bir 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.NotEqual
Assert.Equal
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.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!