Android Studio Robolectric Unit Test Yazmak

roboelectric
Standard

Robolectric, unit testleri oluşturmak için geliştirilmiş bir frameworktur.Robolectric testleri JVM üzerinde koşar, herhangi bir cihaz veya emülatör üzerinde çalışmaz.

JVM üzerinde çalıştığı için CI(continuous integration) için bize çok büyük kolaylık sağlar.Herhangi ek bir konfigürasyon yapmadan unit testlerimizi Jenkins gibi CI tool yardımıyla ile çalıştırabiliriz.

Robolectric bize view üzerinde elementlere,resource kaynaklarına erişmeyi sağlamıştır.

Kaynak kodlarına buradan erişebilirsiniz.

Robolectric kurulumu ve konfigürasyon ayarları

Android studio oluşturduğumuz başlangıç projesinde dosya hiyerarşisinde androidTest ve main dosyaları gelmektedir.Robolectric ile unit testleri çalıştırabilmemiz için test/java adında bir dosya oluşturmak gerekmektedir.

 

studio

 

Ardından Android Studio solunda bulunan Build Variants kısmından Test Artifactini Unit Test olarak seçelim. Yukarıda görebilirsiniz.

Gradle Plugin Gerekli Bağımlılıkların Yüklenmesi

Örnek bir test yazımı ve çalıştırılması.

Activity içinde yaptığımız basit işlemler.

Layout tarafında oluşturduğumuz bileşenler

Örnek roboletric testlerinin yazılması

 

Test Sonuçlarının Görüntülenmesi

test_results

Web Api kullanımı ve optimizasyonu

webapi
Standard

Web Api kullanımı, mobil sektöründe hızla büyümesiyle birlikte hızla artış göstermiştir.Bu yazımda bir restful servis tasarlarken neylere dikkat etmeliyiz buna bakacağız.

  1. Resource isimlendirirken isim kullanın, eylem değil

KaynakGET
read
POST
create
PUT
update
DELETE
/sehirlersehir listesiyeni bir sehir oluşturursehiri değiştirmek içinTüm şehirleri silmek için
/sehirler/3434 numaralı şehri getir34 numaralı şehri değiştir.34 numaralı şehri sil

Zaten kaynak hangi işi yapacağını bize bildiriyor, tekrardan bir eylem olarak belirtmeye gerek yok.

Örneğin;

2.Resource isimlendirirken çoğul isim kullanın

3.Bağlantılı kaynak isimleri kullanın

4.Versiyonlama ile çalışın

  • İyi: v1, v2, v3
  • Kötü: v-1.1, v1.2, 1.3

Böylelikle bazı yerlerde eski, bazı yerlerde yeni versiyonlarla çalışabilirsiniz.

5.Hata Kodlarıyla Çalışın

Hata olarak döndüğümüz mesajı, mutlaka hata koduyla birlikte dönelim.

6.Kullanıcı hangi  istek göndereceğini belirleyebilsin.

7.Dokümantasyon hazırlayın

Referanslar: Github

 

Bootstrap 4 Neler Yeni ?

bootstrap4-comming
Standard

Gecen hafta Bootstrap 4 alpha ortamında yayına alındı.Alpha ortamında değişiklikler tamamen bitmemiş olmakla birlikte production ortamında kullanılması önerilmemektedir.Her şey değişim aşamasındadır.

4 yıl önce Bootstrap 1.0 olarak bootstrap yayınlanmıştı.

v1

 

Bootstrap 2.0 olarak tamamen responsive bir tasarım olarak karşımıza çıktı. IE7 desteklemeyide yavaş yavaş bırakmaya başladı.

v2

 

Daha sonra şuanda kullandığımız versiyon Bootstrap 3.0 yayınlandı. IE 8 desteğinde vazgeçti.Yeni grid sistemi,yeni glyphicons iconları,panel ve list yapıları yeni gelen onlarca özelliklerden bazıları.

v3

Şimdilerde ise Bootstrap 4.0 olarak karşımıza çıkıyor.IE 8 desteğini tamamen kesmiş durumda.Yeni işleyişte Less yerine Sass kullanılacak.

Grid Sistemin Değiştirilmesi

Gelişmiş Medya Sistemi

Mobile

Desktop

Card

Bootstrap 3 kullandığımız Panel ve Wells yerine Card bırakıyor.

ES6 Desteği

Genel Olarak yapılan değişiklikleri buradan görebilirsiniz.

  • Updated grid system with at least one additional tier for handheld devices.
  • A brand new component to replace panels, thumbnails, and wells.
  • A completely new, simpler navbar.
  • Switch all pixel values over to rems and ems for easier and better type and component sizing.
  • Dropped support for IE8.
  • Tons of form updates, including custom form controls.
  • New component animations and transitions for several components.
  • UMD support throughout our JavaScript plugins.
  • Improved JavaScript positioning for tooltips, popovers, and dropdowns.
  • Brand new documentation (written in Markdown, too!).
  • A new approach to configuring global theming options.
  • And hundreds more changes across the board.
  • Perhaps something with “stickers”? See pic below.

Ek Kaynaklar

iamkevinrhodes.com

http://scotch.io

Angular 2 Service, Http ve Routing Yapısı

Angular-component
Standard

App Bootstrap başlangıç noktası

Eğer daha öncesinde angular kullandıysanız, angular’ın uygulamayı ayağa kaldırma noktasında 

bizim için bu işi yapıyordu. Angular2 ile birlikte bu yapı değişerek;

şeklinde çalışmaya başladı.

App Routing

Angular2 ile birlikte routing yapısında component üzerinde routing işlemlerimizi tanımlıyoruz. Angular v1 yaklaşım olarak aynı olarak gözükmektedir.

Öncelikle routing işlemlerimizi tanımlamamız için sisteme eklememiz gerekmektedir. Ayrıca view içinde kullanacağımız angular direktiflerinide sisteme eklememiz gerekmektedir.

Daha sonra hangi componentler için routing işlemlerini  ayarlayabiliriz.

Routing işlemi için kullandığımız componentleri sisteme belirtmemiz gerekir.!

Dummy Bir Service Oluşturulması

Dummy Servisin Kullanılması

Selenium ile test otomasyonu geliştirmek

Standard

Test otomasyonu özellikle tekrarlayan ve manuel olarak yapılması zor olan testlerin kod bazlı otomasyon araçları kullanılarak yapılmasıdır.

Test otomasyonunu yapılırken yaygın olarak kullanılan Selenium kütüphanesi kullanılmıştır. Selenium bir çok dil tarafından desteklenmektedir.Sektörde daha çok java ile birlikte geliştirilmektedir.Genel olarak proje iskeleti ve bağımlılıkların kontrol edilebilmesi için Maven kullanılmaktadır.Kullanılan bir İDE herhangi bir önemi yoktur.

Test Otomasyonu geliştirirken sistemin yapısını oldukça esnek yapmak önemlidir.Arayüz tarafında yapılacak değişikliklerden daha az etkilenmek için proje yapısıda buna göre ayarlanmalıdır.

Burada kısa olarak Selenium ile test otomasyonu geliştirirken kuracağımız yapıdan bahsedip,kısa bir örnek yapacağız.

Selenium ile nasıl yapısal bir proje çıkarırım ?

  1. Selenium ile geliştirme yaparken Page Object Pattern yaklaşımını kullanmanızı tavsiye ederim.Bu sayede testlerin bakımını yapmanız ve test kodları tekrarınını azaltmış oluruz.Page object yaklaşımında; test script ile test objelerini soyutlayarak birbirinden ayırmış oluruz.

Avantajları

  • Kodu değiştirmek kolaydır.
  • Bakımı kolaydır.
  • Sayfadaki objeler ve testler katman olarak birbirinden ayrılmıştır.
  • Okunabilirlik.

2.Magic String kullanmayalım.Sayfa içinde elementlerin id,class,css,xpath,csspathlerini config veya sabit biryerden okuyalım.Sayfa içinde bir element değiştiği zaman config yardımıyla direk olarak tek bir yerden yönetebiliriz.

3.Sayfadaki elementleri neye göre seçmem gerekir.

id > name >links text> css > xpath

 

PageElement Yapılandırılması.

Sayfa içindeki elementleri kullanacağımız bir sınıf oluşturalım.

Page Object Yapılandırılması

Test Yapılandırılması

Page object tanımladığımız methodu test sınıfı içinde kullanabiliriz.

Detaylı olarak buradan bulabilirsiniz.

Android Retrofit ile AccessToken Almak

Retrofit-Classes
Standard

Retrofit, Square tarafından geliştirilen rest client kütüphanesi.Kullanımı diğer kütüphanelere göre kolay.

Token almak için göndereceğimiz model sınıfımız .

 

 

Nereye post edeceğimiz, hangi modeli kullanacağımız ve istek sonucunda bize dönecek cevapı callback vererek belirtiyoruz.

Oluşturduğumuz servisi kullanmak için retrofit bize sunduğu adapteri oluşturuyoruz.

Not:Ben her bir service icin yeni bir adapter üretiyorum. Bu işlemleri tek bir adapter üzerinden yapabiliriz. Bunun icin gondereceğimiz service yapımız bir tane olmalı ve tüm methodları burada tanımlamalıyız.

Neden retrofit kullanmalıyım. Burada güzel bir makale var okumanızı tavsiye ederim.

Projenin detaylı kullanımı için Github bakabilirsiniz.

Ionic ile mobil uygulama geliştirme

ionic-mobile-development-with-ionic-framework-and-angular
Standard

Ionic Nedir ?

Ionic framework,bir mobil uygulama geliştirme kütüphanesidir. Hibrit olarak bir çok platformda Html5 gücünden faydalanarak hızlı bir biçimde uygulama geliştirebiliriz.Android ve iOS bulunan servislere Cordova desteğiyle birlikte ulaşabilirsiniz.Ayrıca yaptığınız uygulamaları MobileWeb olarakta kullanabilirsiniz.

Kurulum

Ionic her platformda geliştirebilirsiniz (Mac,Windows,Linux) Eğer iOS bir uygulama geliştirmek istiyorsanız bir tane Mac ihtiyacınız olacaktır. (Vm olarakta mac kurup çalıştırabilirsiniz)

  1. Eğer windows ortamında çalışıyorsanız Git for Windows kurmuş olmalısınız. ENV PATH git tanımlamaları yapmayı unutmayın !
  2. Node.js bilgisayarınızda kurulu olmalıdır. Eğer kurulu değilse buradan indirebilirsiniz. Aynı şekilde ENV PATH Node.js tanımlamaları yapmayı unutmayın !
  3. Native servisleri kullanmak için cordova plugin indirmemiz gerekmektedir.
  4. Son olarak ionic kuruyoruz.

Detaylı kurulum için buraya bakabilirsiniz.

 

Uygulama icinde geliştirdiğimiz modülleri sisteme inject ediyoruz.Cordova bize sunmuş olduğu servisleri sistemimizde kullanıyoruz.

app.js

Aşağıda örnek bir kontroller yapısını gösterdim.Hangi kontroller olduğunu sisteme belirttim. Controller içinde kullanacağım servisleri inject ettim. Burada önemli nokta view tarafında göstereceğimiz verileri $scope bind etmedim. Bunun yerine controller as yapısını kullandım. Verilerim sadece tanımlamış olduğum kontroller nesnesi üzerinden eriştim.

account.controller.js

Hangi route için hangi view ve controller as çalışacağını config.js belirtiyorum. (ui-router)

config.js

 

Bir Ionic veya angular projesi geliştiriyorsanız. Belirttiğim yaklaşımları kullanabilirsiniz. Dosyalama hiyerarşisi, view kullanımlarına detaylı olarak bakmak için tıklayınız.

Clean code for ionic project.

Angular 2 ile blog sitesi

angular2
Standard

Angular 2, modern web siteleri oluşturmak icin geliştirilmis bir açık kaynak frameworktur. Kendisine ait bir çok yapiyida beraberinde getirmektedir.  Animasyonlar, filtre, yönlendirme, veri bağlama…

Angular,Microsoft’un geliştirmiş olduğu TypeScript ile yazılmaktadır.Daha detaylı buraya bakabilirsiniz.

AtScript_TypeScript_ES6

 

Öncelikle gerekli olan paketleri package.json dosyasına tanımlıyoruz. Sisteminizde Node.js kurulu olması gerekmektedir.

Öncelikle Api call edicek bir tane service ihtiyacımız var. Bunun için Zone.js kullanacağız.Bize gerekli datayı promise olarak getirir. Detaylı olarak buradan bakabilirsiniz.

BlogService isminde bir tane class tanımladık. İçinede tek parametre alan bir method yazdık.Method herhangi bir tip döndürebileceğini any keyword kullanarak belirttik.

 

Oluşturduğumuz servisi ui bind etmemiz gerek. Bunun için angular yeni olan component geliştireceğiz.

  • Her view için bir component tanımlanmalıdır.
  • Ui ile component aracıyla iletişime geçeceğiz.

Kullanmak istediğim modulleri angular2 kütüphanesinden çağırıyorum.Daha önce yazdığımız BlogService Component kullanmak için inject ediyorum.(Yeni DI Detaylıca)

Hangi view ile çalışacağımı belirtiyorum, ayrıca view içinde hangi directive kullanacağımı belirtiyorum.

İnject ettiğim servisi DI çözmesi için yapıcı fonksiyonda belirtiyorum.BlogService ile ilgili method çağırarak dönen datayı view içinde göstereceğim context bind ediyorum.

View içinde datayı göstermek için, angular sunmuş olduğu direktifleri kullanacağız. Angular tarafından sunulan *ng-for gelen data içinde otomatik iterate edecektir.

Projeyi detaylı olarak Github bulabilirsiniz.

HomeBrew Kurulumu ve Kullanımı

homebrew
Standard

Homebrew Mac OS X işletim sistemi üzerinde yazılım kurulumunu kolaylaştıran bir paket yönetim sistemidir.  Gereklı olan kütüphane vs direk olarak sisteminize kurabilirsiniz. Öncelikle Terminal ekranını açıyoruz.

1-) HomeBrew sistemize kurmak icin

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)

terminal ekranında çalıştırıyoruz. Yükleyi yaptıktan sonra her şey tamam .

Daha sonra kurmak istediğininiz herhangi bir kütüphane vs. tek satır kod ile sisteminize kurabilirsiniz.

////

Detaylı bilgi için >>> http://brew.sh/

////