Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğretici, Öğretici: Visual Studio Code kullanarak .NET ile bir konsol uygulaması oluşturma adlı öğreticiyi takip eder. Basit bir konsol uygulaması oluşturmanın ötesine geçerek, gelişmiş ve iyi düzenlenmiş uygulamalar geliştirmenizi sağlar. Kodunuzu düzenlemek için klasörleri nasıl kullanacağınızı gösterdikten sonra, öğretici size xUnit test çerçevesiyle bir konsol uygulamasını nasıl genişleteceğinizi gösterir.
Uyarı
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 görece küçük olduğunda iyi çalışır. Projeye 20 tür eklerseniz ne olacağını hayal edebiliyor musunuz? Projenin kök dizinine çöp atan 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ı tutacak 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 iki tür, Dog
ve Cat
, içerir ve bunları ortak bir arabirimi, IPet
, uygulayacak şekilde düzenler. Proje için NewTypes
hedefiniz evcil hayvanla ilgili türleri Evcil Hayvanlar klasöründe düzenlemektir. Daha sonra başka bir tür kümesi eklenirse, örneğin WildAnimals, Evcil Hayvanlar klasörünün yanı sıra 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ş olarak 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ür:
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önteminin sahibine bir Tweet!
vermesini sağlayın. Uygulamayı yeniden çalıştırın. Çıktı şunları içerir: Tweet!
Örneği test etme
Proje NewTypes
hayata geçirilmiş durumda 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ını otomatik olarak denetlemenize olanak tanır.
src klasörüne geri dönün 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 oluşturur: NewTypesTests.csproj ve UnitTest1.cs.
Test projesi şu anda içindeki NewTypes
türleri test edebilir ve projeye bir proje başvurusu NewTypes
gerektirir. Proje başvurusu eklemek için komutunu dotnet reference add
kullanın:
dotnet reference add ../../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: Eğer daha önce sahibine bir Bird
tür eklediyseniz ve bu türün bir Tweet!
oluşturduğunu sağladıysanız, Bird
türü için TalkToOwner
yönteminin doğru çalışıp çalışmadığını kontrol etmek amacıyla PetTests.cs dosyasına BirdTalkToOwnerReturnsTweet
bir test yöntemi ekleyin.
Uyarı
Beklenen değerler expected
ve actual
eşit olsa da, Assert.NotEqual
denetimiyle yapılan ilk onay bu değerlerin eşit olmadığını belirtir. Her zaman ilk olarak 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 onayını 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 yargılarını Assert.NotEqual
'den Assert.Equal
'e 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);
}
}
komutunu kullanarak 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ı. Evcil hayvan türlerinin yöntemleri, sahibiyle konuşulduğunda doğru sonuçları verir.
xUnit kullanarak projeleri düzenleme ve test etme tekniklerini öğrendinsiniz. Bu teknikleri kendi projelerinize uygulayarak ilerleyin. İyi kodlamalar!