AAA Test Patterni

AAA(Arrange Act Aspect) test patterni oldukça popüler hale gelmiş belki de çoğumuzun bir isimledirilmiş bir pattern olduğunu bilmeden kullandığımız çok basit bir test patternidir.

Unit test dediğimizde yazılımın en küçük birimi olan, her bir fonksiyonun birbirinden bağımsız test edilmesi gibi düşünebiliriz. Kodumuzdaki fonksiyonların diğer bağımlı olduğu fonksiyonlardan bağımsız olarak kendi işini doğru yapıp yapmadığını test etmek için unit testler yazarız.

Unit testin temeli  ” bizim kurguladığımız input’a karşılık fonksiyonumuz beklenen outputu veriyor mu? ” dur. Temelde belli parametreler seçersiniz, bu seçtiğiniz parametrelerle metotları çalıştırıp dönüşlerini beklediğiniz resultla kıyaslarsınız. Böyle bir durumda fonkiyonu test etmek için her parametreyle her inputla ve her case için tek tek test yazamayacağımızdan , doğru inputlar seçmeliyiz. (quality over quantity).   Örnek vermek gerekirse, sayılar üzerinde işlem yapan bir fonksiyonu test ederken, geçerlilik (true test) inputları olarak uç sınırlardan birer tane, ortadan birtane seçmek yerinde olacaktır. 

Unit test yazarken genelde süreç benzer ilerler. Test inputları belirlenir, bu test inputlarına karşılık beklediğimiz result belirlenir, metot test edilir ve gelen sonuç beklediğimiz sonuçla karşılaştırılır. Bu sürecin farkına varan yazılımcılar bu sürece uygun bir unit test patterni oluşturmuşlar. AAA(Arrange Act Aspect) Test patterni. Aslında bu pattern tam olarak az önce kurduğum cümlenin patternleştirilmiş halidir. Maksat unit test yazarken kafada belli bir kalıp oluşturmak ve bunu takip etmek 🙂 .

Arrange : Bu kısımda test edeceğimiz metot için test inputları, gerekli nesneler ve bu test inputları karışısında test edilen metottan beklediğimiz result hazırlanır.

Act : Bu kısım hazırladığımız inputlarla test edilecek metodun çağırıldığı kısımdır.

Assert : Test edilen metottan gelen resultla bizim beklediğimiz resultun .netin assertleriyle karşılaştırıldığı kısımdır.

Olay aslında bu kadar basit ve net

//arrange
var repository = Substitute.For<IClientRepository>();
var client = new Client(repository);

//act
client.Save();

//assert
mock.Received.SomeMethod();

Her seferinde arrange act ve assert ifadeleriniyorum satırı olarak yazmamıza gerek yok ancak belli bir structure uyulduğunu belirtmek ve anlaşılır kılmak adına ben koymayı tercih ediyorum. Somut ufak bir örnek verecek olursak..

[TestMethod]
public void Add_TwoAndFive_ShouldReturn_Seven()
{
     //Arrange
     const int expectedResult = 7;
     int firstValue = 2, secondValue = 5;

     //Act
     int actualResult = _calculator.Add(firstValue, secondValue);

     //Assert
     Assert.AreEqual(expectedResult, actualResult);
}

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir