Ignorování JUnit testů

V případě, že potřebujete, aby se některé JUnit testy nespouštěly, nabízí JUnit anotaci @Ignore (javadoc).

import org.junit.Ignore;
import org.junit.Test;

public class JUnitIgnoreTest {

	@Ignore
	@Test
	public void test1() {
		assertEquals(11, 22);
	}

	@Test
	public void test2() {
		assertEquals(2, 2);
	}
}

junit-ignore-annotace

Je vidět, test byl ignorován. Pokud bychom anotaci @Ignore v tomto případě zakomentovali, test by spadl. Anotaci je možné použít na celou třídu. V tom případě se neprovede žádný test z této třídy.

Rozhraní a defaultní metody v Javě

Defaultní metody v rozhraní nám umožňují přidávat do rozhraní nové metody bez toho, abychom rozbili původní kód. Zde je jednoduchý příklad.

rozhraní MyIntf.java

public interface MyIntf {
	void print(String text);
}

implementace MyIntfImpl.java

public class MyIntfImpl implements MyIntf {

	@Override
	public void print(String text) {
		System.out.println("Printing: " + text);
	}
}

Číst dálRozhraní a defaultní metody v Javě

Nepoužívání hvězdičkového importu v Idea IDE

V případě, že máte několik importů ze stejného balíčku, Idea IDE nahradí jednotlivé importy hvězdičkou (ve výchozím nastavení od pěti importů):

import java.util.*

Pokud vám toto chování nevyhovuje, nastavení lze změnit v Settings -> Editor -> Code Style -> Java -> záložka Imports. Zde nastavte nějaké vysoké číslo.

idea-zakazani-hvezdickovych-importu

import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.Map;

Protocol Buffers

Protocol Buffres (protobuffers) je způsob serializace dat. Serializací je myšleno „převedení datové struktury nebo instance objektu uložené ve vnitřní paměti počítače na posloupnost bitů, kterou lze uložit na nějaké úložiště, případně přenést po síti … je třeba počítat s tím, že objekt budeme převádět zpět ze serializované do původní podoby pomocí tzv. deserializace“ (wiki: wiki).

Protocol Buffers je formát vyvinutý společností Google a je určen pro efektivní výměnu dat. Slovíčko efektivní je zde velmi důležité. Obvyklými formáty dat, pro výměnu, jsou XML a Json. Protofuffer je navržen tak, aby se dal rychle serializovat a deserializovat a byl co nejméně datově náročný. Dle stránky developers.google.com/…/overview je oproti XML:

  • jednodušší
  • 3 – 10 krát menší
  • 20 – 100 krát rychlejší
  • více jednoznačný
  • generuje datové třídy, které se jednodušeji používají.

Konkurentem protobuffers je Apačí projekt Thrift.

Protocol Buffers potřebují schéma, což je textový soubor s příponou .proto. Zde je příklad, jak takový .proto soubor může vypadat:

syntax = "proto3";

option java_package = "cz.vitfo.protobuff";
option java_outer_classname = "PbUser";

message User {
	string username = 1;
	UserProfile userProfile = 2;
}

message UserProfile {
	enum UserStatus {
		ACTIVE = 0;
		PASSIVE = 1;
		CLOSED = 2;
	}
	
	string password = 1;
	UserStatus userStatus = 2;
}

Příště si ukážeme, jak takový soubor vytvořit, zkompilovat a vysvětlíme si, co jednotlivé části znamenají.

Spring – Java konfigurační soubor a konfigurace anotacemi

Spring má dva hlavní způsoby konfigurace (XML a Javu), ale tři hlavní přístupy ke konfiguraci a každý z těchto přístupů má několik názvů.

  • Konfigurace využívající XML (XML based configuration)
    • XML konfigurační soubor a XML konfigurace (XML config and XML-driven/based configuration)
    • XML konfigurační soubor a konfigurace anotacemi (XML config and annotation-driven/based configuration)
  • Konfigurace využívající Javu
    • Java konfigurační soubor a konfigurace anotacemi (Java config and annotation-driven/based configuration | Java based configuration | JavaConfig)

Java konfigurační soubor a konfigurace anotacemi
V tomto příspěvku se podíváme na Java konfigurační soubor a konfigurace anotacemi. V tomto případě se používá pro konfiguraci Java třída a anotace (@Autowired, @Service, …).

Naše jednoduchá aplikace bude mít dvě rozhraní MessageService a SecurityService. Rozhraní MessageService bude mít metodu String getMessage() a SecurityService String encode(String text). Funkčnost aplikace je tato: nejdříve získá řetězec (metoda getMessage()) a ten potom zašifruje (metoda encode()). Vlastní způsob šifrování, implementovaný v SecurityServiceImpl, bude triviální. Všechny písmena e v textu změníme za € a všechna písmena s za §.

Číst dálSpring – Java konfigurační soubor a konfigurace anotacemi

Spring – XML konfigurační soubor a konfigurace anotacemi

Spring má dva hlavní způsoby konfigurace (XML a Javu), ale tři hlavní přístupy ke konfiguraci a každý z těchto přístupů má několik názvů.

  • Konfigurace využívající XML (XML based configuration)
    • XML konfigurační soubor a XML konfigurace (XML config and XML-driven/based configuration)
    • XML konfigurační soubor a konfigurace anotacemi (XML config and annotation-driven/based configuration)
  • Konfigurace využívající Javu
    • Java konfigurační soubor a konfigurace anotacemi (Java config and annotation-driven/based configuration | Java based configuration | JavaConfig)

XML konfigurační soubor a konfigurace anotacemi
V tomto příspěvku se podíváme na XML konfigurační soubor a konfigurace anotacemi. V tomto případě se používá pro konfiguraci XML soubor, ale pro injektování (vytvoření instance a dosazení do požadované proměnné) se používají anotace (@Autowired, @Service, …).

Naše jednoduchá aplikace bude mít dvě rozhraní MessageService a SecurityService. Rozhraní MessageService bude mít metodu String getMessage() a SecurityService String encode(String text). Funkčnost aplikace je tato: nejdříve získá řetězec (metoda getMessage()) a ten potom zašifruje (metoda encode()). Vlastní způsob šifrování, implementovaný v SecurityServiceImpl, bude triviální. Všechny písmena e v textu změníme za € a všechna písmena s za §.

Číst dálSpring – XML konfigurační soubor a konfigurace anotacemi

Nastavení JAVA_HOME v Ubuntu

Proměnnou JAVA_HOME nastavíme tak, že si otevřeme soubor /etc/environment a do něj vložíme záznam:

JAVA_HOME="/usr/lib/jvm/java-8-oracle"

Soubor environment znovu načteme:

source /etc/environment

To, že naše proměnná je funkční můžeme otestovat výpisem do konzole:

echo $JAVA_HOME
/usr/lib/jvm/java-8-oracle

Zdroj: askubuntu.com/…/how-to-set-java-home-for-java

Spring – XML konfigurační soubor a XML konfigurace

Spring má dva hlavní způsoby konfigurace (XML a Javu), ale tři hlavní přístupy ke konfiguraci a každý z těchto přístupů má několik názvů.

  • Konfigurace využívající XML (XML based configuration)
    • XML konfigurační soubor a XML konfigurace (XML config and XML-driven/based configuration)
    • XML konfigurační soubor a konfigurace anotacemi (XML config and annotation-driven/based configuration)
  • Konfigurace využívající Javu
    • Java konfigurační soubor a konfigurace anotacemi (Java config and annotation-driven/based configuration | Java based configuration | JavaConfig)

XML konfigurační soubor a XML konfigurace
V tomto příspěvku se podíváme na XML konfigurační soubor a XML konfigurace. V tomto případě se používá pro konfiguraci XML soubor (beans.xml), ve kterém jsou definovány beany.

Naše jednoduchá aplikace bude mít dvě rozhraní MessageService a SecurityService. Rozhraní MessageService bude mít metodu String getMessage() a SecurityService String encode(String text). Funkčnost aplikace je tato: nejdříve získá řetězec (metoda getMessage()) a ten potom zašifruje (metoda encode()). Vlastní způsob šifrování, implementovaný v SecurityServiceImpl, bude triviální. Všechny písmena e v textu změníme za € a všechna písmena s za §.

Číst dálSpring – XML konfigurační soubor a XML konfigurace

Zaokrouhlování v Javě pomocí BigDecimal

Pro práci s desetinnými čísly je vhodné místo double (více zde) používat BigDecimal. BigDecimal je možné nastavit scale (počet desetinných míst) a roundingMode (způsob zaokrouhlení). V příkladu je uvedeno jen několik způsobů zaokrouhlení. BigDecimal jich je možno nastavit více.

double number = 1.5555;
BigDecimal x = new BigDecimal(String.valueOf(number));
BigDecimal y = new BigDecimal(String.valueOf(number));
BigDecimal z = new BigDecimal(String.valueOf(number));

System.out.println("HALF_UP");
System.out.println(x.setScale(3, RoundingMode.HALF_UP));
System.out.println(y.setScale(2, RoundingMode.HALF_UP));
System.out.println(z.setScale(1, RoundingMode.HALF_UP));

System.out.println("HALF_DOWN");
System.out.println(x.setScale(3, RoundingMode.HALF_DOWN));
System.out.println(y.setScale(2, RoundingMode.HALF_DOWN));
System.out.println(z.setScale(1, RoundingMode.HALF_DOWN));

System.out.println("FLOOR");
System.out.println(x.setScale(3, RoundingMode.FLOOR));
System.out.println(y.setScale(2, RoundingMode.FLOOR));
System.out.println(z.setScale(1, RoundingMode.FLOOR));

System.out.println("CEILING");
System.out.println(x.setScale(3, RoundingMode.CEILING));
System.out.println(y.setScale(2, RoundingMode.CEILING));
System.out.println(z.setScale(1, RoundingMode.CEILING));

Výsledek:

HALF_UP
1.556
1.56
1.6

HALF_DOWN
1.555
1.56
1.6

FLOOR
1.555
1.55
1.5

CEILING
1.556
1.56
1.6

Zaokrouhlování v Javě pomocí knihovny Math

Knihovna Math nabízí pro zaokrouhlování tyto funkce:

  • round: vrací celé číslo (long), očekávané zaokrouhlení (od 5 nahoru)
  • rint: vrací desetinné číslo (double), podobné jakou round, ale ne vždy
  • floor: vrací desetinné číslo (double), zaokrouhluje směrem dolů
  • ceil: vrací desetinné číslo (double), zaokrouhluje směrem nahoru
double a = 1.4;
double b = 1.5;
double c = 1.6;
double na = -1.4;
double nb = -1.5;
double nc = -1.6;

System.out.println("round");
System.out.println(Math.round(a));
System.out.println(Math.round(b));
System.out.println(Math.round(c));
System.out.println(Math.round(na));
System.out.println(Math.round(nb));
System.out.println(Math.round(nc));

System.out.println("floor");
System.out.println(Math.floor(a));
System.out.println(Math.floor(b));
System.out.println(Math.floor(c));
System.out.println(Math.floor(na));
System.out.println(Math.floor(nb));
System.out.println(Math.floor(nc));

System.out.println("ceil");
System.out.println(Math.ceil(a));
System.out.println(Math.ceil(b));
System.out.println(Math.ceil(c));
System.out.println(Math.ceil(na));
System.out.println(Math.ceil(nb));
System.out.println(Math.ceil(nc));

Výsledek:

round
1
2
2
-1
-1
-2

floor
1.0
1.0
1.0
-2.0
-2.0
-2.0

ceil
2.0
2.0
2.0
-1.0
-1.0
-1.0