Otomatik Mühendis

Google Books API'den Konum Hatası

Code 403 Cannot determine user location for geographically restricted operation

Google AppEngine veya Heroku üzerindeki uygulamanızda Google Books API’a erişimde aşağıdaki hatayı almanız muhtemeldir.

Code 403: Cannot determine user location for geographically restricted operation

Hata mesajında da belirtildiği gibi kullanıcının konumu belirlenemediği için bu hata oluşmaktadır. Bunun da önüne geçmek için Google Books API clientıyla çağrı yaparken request’in header bilgilerine country parametresini de eklemeliyiz. Bu parametre Java ve .Net kütüphanelerinde public set edilebilir değildir. Bu sebeple request oluşturulurken RequestInitializer methodunda bunu eklemeliyiz.

Java için çözümüne bakabilirsiniz veya aşağıdaki örnekte olduğu gibi C# için uygulanışını görebilirsiniz.

Okumaya devam »


ASP.NET Core Sitesini Konsol Parametleriyle Çalıştırmak

ASP.NET Core uygulamasını içeren .dll dosyası KestrelHttpServer sunucusu sayesinde IIS’e ihtiyaç duymadan ayağa kalkabilmektedir. Bir konsol uygulaması gibi çalışmaktadır.

Örnek senaryomuz; Heroku cloud platformuna kurduğumuz uygulamamız ayağa kaldırıldığı sırada server.urls parametresi ile belirli bir portu dinlemeye zorlanmaktadır. ASP.NET Core uygulamaları ön tanımlı olarak 5000 portu üzerinden çalışırlar. Bu durumda uygulamamız istenen portu dinlemeyecektir.

cd /app/heroku_output && dotnet ./Libton.dll --server.urls http://+:54372

Heroku platformunda dotnet cli‘a gönderilen bu komutta istenen port değişken olarak verilmektedir.

Konsol uygulamalarında çalıştırma sırasında parametreler vererek program içerisinde bunları kullanabiliriz. Bu yeteneği uygulamamıza kazandırabilmek için NuGet Package Manager üzerinden Microsoft.Extensions.Configuration.CommandLine referansını ekleriz.

Daha sonra Program class’ında ki Main methodunda, komut satırı parametrelerini ayar parametlerine dönüştürerek, WebHostBuilder’a bu ayarları aktarırız.

Bu çalışma sonunda Program.cs dosyamız aşağıdaki hali alır.

Okumaya devam »


Yazılımcı Blogları

Yazılımcı bloglarının güncel listesi

Sindre Sorhus’ blog - Yeoman ve TodoMVC‘nin geliştiricisi

Mike Mengell

Brett Slatkin - Tavsiye yazısı: What’s awful about being a {software engineer, tech lead, manager}?

StrathWeb by Filip W.

Burak Tungut - “Algoritma ve Programlama Mantığı” ve “Asp.Net Web API ve Mimari Özellikleri” kitaplarının yazarı

Gökhan Gökalp - “Asp.Net Web API ve Mimari Özellikleri” kitabının yazarı

Ahmet Rende

Halil ibrahim Kalkan - ASP.NET Boilerplate‘in geliştiricisi

Tayfun Yaşar

Tuğba Üstündağ

Okumaya devam »


Test Attribute ve Annotation'ları

Çeşitli test frameworklerinde sıklıkla kullanılan Attribute ve Annotation'lar

Aşağıdaki tabloda NUnit, MSTest, xUnit.net ve JUnit test frameworklerinde sıklıkla kullandığımız Attribute ve Annotation’ları açıklamarıyla birlikte görebilirsiniz.

JUnit için en iyi örnekleri Guru99 sitesinde bulabilirsiniz.

NUnit MSTest xUnit.net JUnit Açıklama
[TestFixture] [TestClass] - - Class’ın test içerdiğini belirtir.
[Test] [TestMethod] [Fact] @Test Method’un test case’i olduğunu belirtir.
[OneTimeSetUp] [ClassInitialize] IClassFixture @BeforeClass Testler başlamadan önce tek sefer çalışacak method.
[OneTimeTearDown] [ClassCleanup] IClassFixture @AfterClass Testler tamamlandıktan sonra tek sefer çalışacak method.
[SetUp] [TestInitialize] Constructor @Before Her testten önce çalışacak methoddur.
[TearDown] [TestCleanup] IDisposable.Dispose @After Her test tamamlandıktan sonra çalışacak methoddur.
[Ignore] [Ignore] [Fact(Skip=”reason”)] @Ignore Test case olmasına rağmen çalıştırılmasını istemediğimiz methodları bununla işaretleyebiliriz.
[Category(“”)] [TestCategory(“”)] [Trait(“Category”, “”)] @Category(*.class) Testleri kategoriler halinde sınıflandırmamızı sağlar.
Okumaya devam »


JUnit ve Selenium WebDriver ile Fonksiyonel Test

Basit bir CRUD (Create, Read, Update, Delete) işlemi için JUnit ve Selenium WebDriver kullanarak fonksiyonel test nasıl yazılır?

Fonksiyonel test; sistem içerisindeki bir fonksiyonun doğru şekilde çalışıp çalışmadığını kontrol etmektir. Diğer test türleri arasında en geniş kapsamlı olandır. Kullanıcının hareketleri test ortamında oluşturulur.

Fonksiyonel testin en büyük dezavantajı, değişen arayüzlerle birlikte değişmesi gerekliliğidir. Bu maliyetin daha düşük olabilmesi için değişkenleri POM (Page Object Model) nesneleri içerisinde toplarız. Sayfa tasarımları değiştikçe bu nesneler üzerinde değişiklik yapmak test case’ler üzerinde değişiklik yapmaktan daha kolay olacaktır.

functionalTestingEdit.png

Yukarıda gördüğünüz şekilde (sayfa elementleri kırmızı ile ifade edilmiştir, farklı ifadeler için farklı erişim yöntemleri uygulanacaktır) bir düzenleme sayfası için aşağıdaki model oluşturulabilir.

Okumaya devam »