31 Mart 2019 Pazar

Mockito when + thenAnswer Kullanımı - Her Seferinde Farklı Sonuç Dönmek İçin

Giriş
Bu kullanım when + thenReturn ile benzer. Açıklaması şöyle. Yani thenReturn()'den farklı olarak aynı sonucu dönmek yerine her seferinde farklı bir sonuç döndürürebilir.
the difference is: answer will every time be executed. Return remembers the value we told them in the when. 
Örnek
Şöyle yaparız.
when(someMock.someMethod()).thenAnswer(new Answer() {
  private int count = 0;

  public Object answer(InvocationOnMock invocation) {
    return (count++;
  }
});
invocation.getArguments metodu
Örnek
Metod'a geçilen parametrelere erişmek için şöyle yaparız.
when(rt.exchange(anyString(), any(HttpMethod.class), any(), any()))
  .thenAnswer((invocation) -> {
     Object paramToCheck = invocation.getArguments()[3];

     if(paramToCheck instanceof String){
       return response;
     }else if (paramToCheck instanceof InfsEspecificasDTO){
       return responseInfoEsp;
     }

     return null;

  });

29 Mart 2019 Cuma

Locale Sınıfı

Giriş
Şu satırı dahil ederiz. Java 9'dan itibaren Locale Data Providers
import java.util.Locale;
Türkçe locale için şöyle yaparız
Locale trlocale= Locale.forLanguageTag("tr_TR");
Şöyle yaparız
Locale.setDefault(new Locale("tr", "TR"));
Buradaki format şöyle. Yani önce dil, sonra ülke veriliyor. "en-GB", "en-US" kullanılabilir. Üçünü bir parametre olarak bir de variant belirtilebiliyor ancak bu çok önemli değil
language = turkish
country = turkey
Locale Data Providers
Java 9'dan itibaren Locale Data Provider olarak JDK yerine Unicode Common Locale Data Repository (CLDR) kullanılıyor. JDK ve CLDR arasında ufak tefek farklılıklar var.

Hazır Locale Nesneleri
Şöyle yaparız.
Locale.ENGLISH
constructor - language
Şöyle yaparız.
Locale locale = new Locale ("en");
constructor - language + country
Şöyle yaparız.
Locale ireland = new Locale ("en","IE");
Şöyle yaparız.
Locale croatian = new Locale ("hr", "HR");
Şöyle yaparız
Locale locale=new Locale("es", "ES");
getAvailableLocales metodu
Şöyle yaparız.
for (Locale locale : Locale.getAvailableLocales()) {
  ...
}
getCountry metodu
Şöyle yaparız.
System.out.println(currentLocale.getCountry());
getDefault metodu
Şöyle yaparız.
Locale locale = Locale.getDefault()
getDisplayCountry metodu
Default Locale ne ise o dilde yazar. Şöyle yaparız.
String str = locale.getDisplayCountry();
Default Locale ABD ise ve DisplayLanguage US ise çıktı olarak şunu alırız
United States
getDisplayLanguage metodu
Default Locale ne ise o dilde yazar. Şöyle yaparız.
String str = locale.getDisplayLanguage();
Örnek
Default Locale Türkiye ise ve DisplayLanguage US ise çıktı olarak şunu alırız
İngilizce
Default Locale ABD ise ve DisplayLanguage US ise çıktı olarak şunu alırız
English 
getLanguage metodu
Şöyle yaparız.
System.out.println(currentLocale.getLanguage());
getForLanguageTag metodu
Şöyle yaparız
Locale locale = Locale.forLanguageTag("tr_TR");
setDefault metodu
Şöyle yaparız.
Locale locale = ...;
Locale.setDefault(locale);
toString metodu
Şöyle yaparız
System.out.println(new Locale("hi", "IN"));
Çıktı olarak şunu alırız
hi_IN



28 Mart 2019 Perşembe

StringJoiner Sınıfı

Giriş
Açıklaması şöyle. Bu sınıf yerine Collectors.joining kullanılabilir
StringJoiner is used to construct a sequence of characters separated by a delimiter and optionally starting with a supplied prefix and ending with a supplied suffix.
Temel olarak bu sınıfın sadece add() metodunu arka arkaya çağırıp, işimiz bitince toString() metodunu çağırıyoruz. add() metodunu arka arkaya çağırmak yerine Collectors.joining() metodunu kullanmak daha kolay olabilir. Collectors.joining() altta StringJoiner sınıfını kullanır ve bu sınıfın verdiği aynı metodları sağlar. Böylece döngüler kurmak yerine stream ile daha kolay çalışabiliriz.

constructor - delimeter
Şöyle yaparız.
String str = new StringJoiner(",").add("a").add("b").add("c").toString();
constructor - delimeter + prefix + suffix
İmzası şöyle.
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
Örnek
Şöyle yaparız
List<Integer> ints = Arrays.asList(123, 456, 789);
StringJoiner mystring = new StringJoiner("),(", "(", ")");
ints.forEach(i -> mystring.add(String.valueOf(i)));
        
System.out.println( mystring );
Çıktı olarak şunu alırız
(123), (456), (789)
Örnek
Şöyle yaparız. Çıktı olarak "Bill and Bob and Steve" alırız
StringJoiner sj = new StringJoiner(" and ", "" , "");
String[] names = {"Bill", "Bob", "Steve"};
for (String name : names) {
   sj.add(name);
}
System.out.println(sj);
add metodu
Şöyle yaparız. Çıktı olarak örneğin "[Bill and Bob and Steve]" alırız
private String getCookieString(Cookie[] cookies){
  if(cookies == null)
    return "null";
  StringJoiner stringJoiner = new StringJoiner(",","[","]");
  for (Cookie cookie : cookies) {
    stringJoiner.add(ReflectionToStringBuilder.toString(cookie));
  }
  return stringJoiner.toString();
}