• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

C# ile Unit Test Projesi Kullanımı

Unit Test'in ne olduğunu ve C#'Ta Junit Testlerin nasıl oluşturulduğunu birkaç örnek ile inceleyelim.

02.05.2012

Yazar: Veysel Uğur KIZMAZ (Google+)

Kategori: C#.Net

4233

 Bu makalemizde C#’ta Junit Testlerin nasıl oluşturulduğunu birkaç örnek ile inceleyeceğiz.

 
Öncelikle Unit Test nedir konusu ile başlayalım.
 
Unit test, yazılımda en temel test çeşitidir. Yazılan fonksiyonların çalışıp çalışmadığının testlerini yapmak için kullanılır. Buradaki en temel noktalardan biri, oluşturulan bütün testler birbirinden bağımsız çalışmaktadır ve her testin tek bir sonucu olmalıdır (true / false).
 
Unit testlerde en büyük avantaj yazılımın geliştirilme hızıdır. Unit testlerin olmadığı bir projeyi düşünelim. Bu projede kullanıcı, bir ürün kaydı yapsın. Proje çalıştığında
  1. Kullanıcı önce bilgileriyle giriş yapıyor,
  2. İşlem yapacağı birimi seçiyor,
  3. Kayıt yapacağı kategoriyi seçiyor,
  4. Açılan formda gerekli bilgilerini yazıyor
  5. Kayıt butonuna basıyor
 
Unit testlerin olmadığı bir projede yazılım geliştirici, yazılan kayıt fonksiyonu hemen arayüz katmanına bağlandığı taktirde runtime’da oluşacak hataların tespiti için bu işlemlerin hepsini tamamlayıp kayıt butonuna bastığında hatayla karşılaşacaktır. Hatayı düzeltip tekrar çalıştıracak, aynı işlemleri tekrar yapacak ve başka bir hatayla karşılaşabilecektir. Bu, yazılımcıya projenin ilerleyen aşamalarında büyük zaman kaybı yaşatmaktadır.
 
Unit testlerin en büyük avantajı da burada kendini göstermektedir. Bir üst satırda yazdığım örneği unit testlerle gerçekleştiren bir yazılımcı, bu işlemlerin hiçbirini yapmadan kendi oluşturduğu dummy datalarla bu hataları arayüz katmanına bağlama işlemini yapmadan alacak, testlerinin tümü başarıyla çalıştıktan sonra arayüz katmanına bağlama işlemini yapacak ve zaman kaybını önleyecektir.
 
Unit test oluştururken yapılması gereken, sadece kodun çalışacağı değerlerde değil çalışmayacağı değerlerin de parametrelerde gönderilip verilen hataların düzenlenmesidir. Örneğin bir fonksiyon içinde bir yerde bölme işlemi geçiyorsa parametreden bu bölme işleminde böleni 0 yapan bir değer gönderdiğimizde hata vereceğini biliyorsak bu hatanın sonucunda sistemin nasıl bir sonuç üreteceğini de görmemiz gerekmektedir. Bunun için de bir test yazmamız gerekecektir. Classlarımız tamamlandığında testlerinin de oluşturulup classlardaki tüm fonksiyonların testlerini başarıyla tamamlamalarını sağladıktan sonra bir sonraki class’ı kodlamaya başlamak gerekmektedir.
 
Peki Unit Test’in avantajlarını hızlıca maddelemek istersek:
 
  1. Yazılan kodun her satırının başka bir kod (test kodu) tarafından otomatik olarak test edilmesini sağlar.
  2. Kodun anlaşılmasını kolaylaştırır.
  3. Daha hızlı yazılım geliştirmeyi sağlar.
  4. Koddaki hata oranını azaltır.
  5. Kodların kalitesinin artmasını sağlar.
  6. Hataların çabuk tespit edilip düzenlenmesini sağlar.
 
Şimdi .Net’te (C#) Unit Test’in nasıl yapıldığını inceleyelim.
 
.Net’te unit testi için önce testini yapacağımız sınıf ve fonksiyonu bir Class Library projesinde oluşturalım.
 
 
Örnek sınıfımızda parametre olarak 2 sayı gönderiyoruz ve bu sayıları kullanarak çarpma ve bölme işlemlerini gerçekleştiriyoruz.
 
 
  1. public class Islem
  2. {
  3.     public Islem() { }
  4.     public Islem(int sayi1, int sayi2)
  5.     {
  6.         this.Sayi1 = sayi1;
  7.         this.Sayi2 = sayi2;
  8.     }
  9.  
  10.     public int Sayi1 { get; set; }
  11.     public int Sayi2 { get; set; }
  12.  
  13.     public int Carp()
  14.     {
  15.         return this.Sayi1 * this.Sayi2;
  16.     }
  17.     public int Bol()
  18.     {
  19.         return this.Sayi1 / this.Sayi2;
  20.     }
  21. }
    public class Islem
    {
        public Islem() { }
        public Islem(int sayi1, int sayi2)
        {
            this.Sayi1 = sayi1;
            this.Sayi2 = sayi2;
        }

        public int Sayi1 { get; set; }
        public int Sayi2 { get; set; }

        public int Carp()
        {
            return this.Sayi1 * this.Sayi2;
        }
        public int Bol()
        {
            return this.Sayi1 / this.Sayi2;
        }
    }
Sınıfımızı oluşturduk. Şimdi test projemizi oluşturalım. Bunun için Solution Explorer’dan Add -> New Project ile yeni bir proje ekliyoruz ve C# Test Projesini seçiyoruz.
 
 
Test projesi oluşturulduğunda Solution Explorer’ın görüntüsü aşağıdaki gibidir. 
 
 
Visual Studio, UnitTest1.cs isminde hazır bir Unit Test dosyası oluşturuyor. Şimdi bunu silelim ve yeni bir unit test oluşturmak için hazırladığımız Islem sınıfına gidelim, fonksiyonumuza sağ tıklayıp “Create Unit Tests…” linkine tıklayalım.
 
 
Açılan ekranda hangi test projesinde testimizi yapacağımızı ve hangi fonksiyonları test edeceğimizi seçiyoruz ve “OK” butonuna tıklıyoruz. Visual Studio, seçimimize göre test classını oluşturacaktır.
 
 
Oluşturulan IslemTest1.cs’nin test fonksiyonları ilk oluşturulduğunda aşağıdaki gibidir.
 
 
  1. /// <summary>
  2. ///A test for Bol
  3. ///</summary>
  4. [TestMethod()]
  5. public void BolTest()
  6. {
  7.     int sayi1 = 0; // TODO: Initialize to an appropriate value
  8.     int sayi2 = 0; // TODO: Initialize to an appropriate value
  9.     Islem target = new Islem(sayi1, sayi2); // TODO: Initialize to an appropriate value
  10.     int expected = 0; // TODO: Initialize to an appropriate value
  11.     int actual;
  12.     actual = target.Bol();
  13.     Assert.AreEqual(expected, actual);
  14.     Assert.Inconclusive("Verify the correctness of this test method.");
  15. }
  16.  
  17. /// <summary>
  18. ///A test for Carp
  19. ///</summary>
  20. [TestMethod()]
  21. public void CarpTest()
  22. {
  23.     int sayi1 = 0; // TODO: Initialize to an appropriate value
  24.     int sayi2 = 0; // TODO: Initialize to an appropriate value
  25.     Islem target = new Islem(sayi1, sayi2); // TODO: Initialize to an appropriate value
  26.     int expected = 0; // TODO: Initialize to an appropriate value
  27.     int actual;
  28.     actual = target.Carp();
  29.     Assert.AreEqual(expected, actual);
  30.     Assert.Inconclusive("Verify the correctness of this test method.");
  31. }
        /// <summary>
        ///A test for Bol
        ///</summary>
        [TestMethod()]
        public void BolTest()
        {
            int sayi1 = 0; // TODO: Initialize to an appropriate value
            int sayi2 = 0; // TODO: Initialize to an appropriate value
            Islem target = new Islem(sayi1, sayi2); // TODO: Initialize to an appropriate value
            int expected = 0; // TODO: Initialize to an appropriate value
            int actual;
            actual = target.Bol();
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Verify the correctness of this test method.");
        }

        /// <summary>
        ///A test for Carp
        ///</summary>
        [TestMethod()]
        public void CarpTest()
        {
            int sayi1 = 0; // TODO: Initialize to an appropriate value
            int sayi2 = 0; // TODO: Initialize to an appropriate value
            Islem target = new Islem(sayi1, sayi2); // TODO: Initialize to an appropriate value
            int expected = 0; // TODO: Initialize to an appropriate value
            int actual;
            actual = target.Carp();
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Verify the correctness of this test method.");
        }
Burada dikkat etmemiz gereken en önemli nokta, TestMethod() attribute’udur. Buna sahip tüm methodlar test methodlarıdır diyebiliriz.
 
Islem sınıfının Carp() methodunun testinin yazılacağı için  söylemiştik. Islem sınıfından bir nesne oluşturmak için 2 tane int değere ihtiyacımız vardır. Bu değerleri birer değişken ile (sayi1, sayi2) otomatik oluşturuluyor. Bunun sebebi, testlerde gönderdiğimiz parametreleri daha iyi görebilmektir.
 
İşlem tamamlandıktan sonra bir sonuç dönmesini bekleyeceğiz. Bu test için sonucun kaç olmasını bekliyorsak onu expected değişkenimize atıyoruz.
 
Şimdiye kadar oluşturulan değişkenler, test işleminde gönderilen ve alınan sonuçları takip etmemizi kolaylaştıracaktır.
 
Değişkenleri oluşturduktan sonra işlemlerimizi yaptık ve expected değişkenimize işlemimizin fonksiyondan gelen soncunu atadık.
 
Test projesinin kontrol noktasına gelelim. Assert sınıfı.
 
Testimizin çalışıp ürettiği sonuca göre doğru yanlışlığını bu sınıfın methodları ile kontrol etmekteyiz. Assert sınıfının bazı methodlarına göz atalım.
 
AreEqual
Parametredeki değerlerin birbirine eşit olmasını kontrol eder.
AreNotEqual
Parametredeki değerlerin birbirine eşit olmamasını kontrol eder.
AreNotSame
Parametrelerdeki değerlerin aynı olmamasını kontrol eder.
AreSome
Parametrelerdeki değerlerin aynı olmasını kontrol eder.
Equals
Parametrelerdeki değerlerin eşit olmasını kontrol eder.
Fail
Koşulsuz kontrol sağlamak
IsFalse
Parametredeki değerin false olmasını kontrol eder.
IsNotNull
Parametredeki değerin null olmamasını kontrol eder.
IsNull
Parametredeki değerin null olmasını kontrol eder.
IsTrue
Parametredeki değerin true olmasını kontrol eder.
 
Temel anlamda kullanılan test methodları bunlardır. Şimdi örneğimizde kullanıdığımız methoda bakalım.
 
 
  1. Assert.AreEqual(expected, actual);
Assert.AreEqual(expected, actual);
sonuc, gercekSonuc’a eşitse test başarıyla sonuçlanacak, hata verecektir.
 
Şimdi test kodumuzu şu şekilde düzenleyelim:
 
 
  1. [TestMethod()]
  2. public void CarpTest()
  3. {
  4.     int sayi1 = 10; // TODO: Initialize to an appropriate value
  5.     int sayi2 = 20; // TODO: Initialize to an appropriate value
  6.     Islem target = new Islem(sayi1, sayi2); // TODO: Initialize to an appropriate value
  7.     int expected = 200; // TODO: Initialize to an appropriate value
  8.     int actual;
  9.     actual = target.Carp();
  10.     Assert.AreEqual(expected, actual);
  11. }
        [TestMethod()]
        public void CarpTest()
        {
            int sayi1 = 10; // TODO: Initialize to an appropriate value
            int sayi2 = 20; // TODO: Initialize to an appropriate value
            Islem target = new Islem(sayi1, sayi2); // TODO: Initialize to an appropriate value
            int expected = 200; // TODO: Initialize to an appropriate value
            int actual;
            actual = target.Carp();
            Assert.AreEqual(expected, actual);
        }
Şimdi CarpTest() isimli test methodumuzu çalıştıralım. Bunun için “Run Tests in Current Context” butonuna tıklıyoruz. Hemen sağında “Run All Tests in Current Context” butonuna tıklayarak tüm testleri çalıştırabiliriz.
 
 
Testi çalıştırdıktan sonra Test Results ekranında aşağıdaki sonucu göreceğiz.
 
 
Test sonuçloarını bu ekrandan takip edebilmekteyiz.
 
Şimdi Carp() methodumuzun kodunu şu şekilde düzenliyoruz.
 
 
  1. [TestMethod()]
  2. public void CarpTest()
  3. {
  4.     int sayi1 = 10; // TODO: Initialize to an appropriate value
  5.     int sayi2 = 220; // TODO: Initialize to an appropriate value
  6.     Islem target = new Islem(sayi1, sayi2); // TODO: Initialize to an appropriate value
  7.     int expected = 200; // TODO: Initialize to an appropriate value
  8.     int actual;
  9.     actual = target.Carp();
  10.     Assert.AreEqual(expected, actual);
  11. }
        [TestMethod()]
        public void CarpTest()
        {
            int sayi1 = 10; // TODO: Initialize to an appropriate value
            int sayi2 = 220; // TODO: Initialize to an appropriate value
            Islem target = new Islem(sayi1, sayi2); // TODO: Initialize to an appropriate value
            int expected = 200; // TODO: Initialize to an appropriate value
            int actual;
            actual = target.Carp();
            Assert.AreEqual(expected, actual);
        }
Sonucun 200 çıkmasını bekliyoruz fakat 2200 çıkacaktır ve testten başarısız sonuç alacağız. Testi çalıştırdığımızda Test Results ekranı aşağıdaki gibi gelecektir.
 
 
 
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com

Yazar Hakkında

Veysel Uğur  KIZMAZ

Veysel Uğur KIZMAZ

www.ugurkizmaz.com

YazılımDilleri.Net projesinin lideri olan Veysel Uğur Kızmaz, Gazi Üniversitesi Bilgisayar Mühendisliği bölümü mezunudur. Bir çok projede çalışmış, yazılım alanında birçok eğitimler vermiştir. Şu an özel bir yazılım danışmanlık firmasında Sharepoint proje danışmanlığı ve proje yöneticiliği yapmaktadır. Veysel Uğur Kızmaz, dahil olduğu projelerin çeşitliliği sebebiyle farklı alanlarda uzmanlaşmıştır: .Net, Sharepoint, Java, Php, Javascript, SQL Server, Oracle, MySQL.

Sosyal Medya

ORANLAR

  • 4233izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 123823
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 70897
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 51538
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ