wz

Java - získání obsahu adresy s pomocí org.apache.http

03:08 07.06.2016

Zkoušel jsem si v Javě využití tříd z org.apache.http k tomu, abych si stáhl obsah z určité adresy (reálně šlo o volání REST API určité služby). Jedna z nejprostějších variant kódu vypadala cca takto:

package cz.sachmartin.xxx;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;

public class XxxApache {
	public static void main(String[] args) throws ClientProtocolException, IOException{
		HttpClient client = HttpClientBuilder.create().build(); //deprecated: new DefaultHttpClient();

		HttpGet request = new HttpGet("https://xxx.cz");

		HttpResponse response = client.execute(request);

		BufferedReader rd = new BufferedReader (new InputStreamReader(response.getEntity().getContent()));

		String line = "";

		while ((line = rd.readLine()) != null) {
		    System.out.println(line);
		}

	}
}

V Mavenu:

<dependencies>
	<dependency>
		<groupId>org.apache.httpcomponents</groupId>
		<artifactId>httpclient</artifactId>
		<version>4.5.2</version>
	</dependency>
</dependencies>

Java - možnost realizace delay

00:44 02.02.2016

Rámcový příklad vytržený z jednoho z mých kódu:

		try {
			TimeUnit.SECONDS.sleep(15);
		}
		catch(InterruptedException ex) {
			Thread.currentThread().interrupt();
			ex.printStackTrace();
		}

Java: Konstanta typu String

00:34 02.02.2016

Příklad z jedné třídy:

public static final String RIGHT_ID = "right_13111";

Java: Porovnání dvou řetězců

22:33 25.05.2015

Dva řetězce (stringy) lze v Javě porovnat pomocí metody equals(). Více. viz. zde.

JUnit - pořadí metod testu - FixMethodOrder

22:22 25.05.2015

Chce-li si člověk v JUnit testu trošku ovlivnit pořadí volání metod testu, může zkusit anotaci FixMethodOrder - ta zpřístupňuje několik možností. Více viz. zde.

JUnit: Expected exceptions

22:21 07.07.2014

V JUnit testu si lze u testovacích metod definovat výjimky, po jejichž vyhození není test vyhodnocen jako chybný. Malý příklad následuje. V tomto příkladu test3() je vyhodnoceno jako úspěšný test.

import static org.junit.Assert.assertTrue;

import java.io.IOException;

import org.junit.Test;

public class ExpectedException {
	@Test
	public void test1() throws IOException{
		throw new IOException();
	}
	
	@Test(expected=NullPointerException.class)
	public void test2() throws IOException{
		throw new IOException();
	}	
	
	@Test(expected=IOException.class)
	public void test3() throws InterruptedException, IOException{
		throw new IOException();
	}
}

JUnit: Nastavení timeoutu

22:15 07.07.2014

V JUnit máme možnost specifikovat čas, po který může testovací metoda běžet. Malý (nesmyslný) příklad následuje. Methoda test3() v něm skončí vyhodnocená jako error (java.lang.Exception: test timed out after 2000 milliseconds).

import static org.junit.Assert.*;

import org.junit.Test;

public class Timeout {

	@Test
	public void test1(){
		System.out.println("Test1");
		assertTrue(true);
	}
	
	@Test(timeout=2000)
	public void test2() throws InterruptedException{
		System.out.println("Test2");
		Thread.sleep(1000);
		assertTrue(true);
	}	
	
	@Test(timeout=2000)
	public void test3() throws InterruptedException{
		System.out.println("Test3");
		Thread.sleep(3000);
		assertTrue(true);
	}
	
}

Malá ukázka použití anotací v JUnit testu

21:40 07.07.2014

Tento příspěvek nemá být nic jiného, než ukázka možné (nesmyslné) JUnit třídy s několika metodami s anotacemi. Ty mají svůj nezanedbatelný význam. Pod zdrojovým kódem lze vidět výstup po spuštění testu.

Kód:

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class Anotations {

	@Test
	public void testMethod1() {
		System.out.println("testMethod1");
		assertTrue(true);
	}

	public void testMethod2(){
		System.out.println("testMethod2");
		assertTrue(true);
	}
	
	@Test
	public void testMethod3(){
		System.out.println("testMethod3");
		assertTrue(true);
	}
	
	@Before
	public void beforeNeco(){
		System.out.println("Before Neco");
	}
	
	@After
	public void afterNeco(){
		System.out.println("after neco");
	}
	
	@BeforeClass
	public static void beforeClassBlabla(){
		System.out.println("beforeClass blabla");
	}
	
	@BeforeClass
	public static void beforeClassHihi(){
		System.out.println("beforeClass Hihi");
	}	
}

Výstup:

beforeClass Hihi
beforeClass blabla
Before Neco
testMethod1
after neco
Before Neco
testMethod3
after neco

JUnit Test Suite

21:20 07.07.2014

Při hraní si s možnostmi WebDriveru jsem se dostal i ke starému dobrému JUnitu. V tom jsem si vytvořil několik pokusných tříd. Jedna z nich se jmenuje TestcasePokus a k vidění je v tomto příspěvku. Další třída se pak jmenovala PokusTest2, a jmenovat bych mohl dál, ale nebylo by to podstatné. JUnit test suite představuje možnost, jak spouštět více testů najednou. Tedy i těch mých zkušebních. Jednoduchý příkládek následuje.

package seleniumPokus;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({ PokusTest2.class, TestcasePokus.class })
public class AllTests {

}

Víc rozvedené je to např. v tomto článku.

WebDriver + JUnit test - příklad

13:40 06.07.2014

Selenium WebDriver lze použít společně s JUnitem. Malý příkládek následuje.

package seleniumPokus;

import static org.junit.Assert.*;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class TestcasePokus {

	private WebDriver driver;
	
	public TestcasePokus(){
		driver = new FirefoxDriver();
		driver.get("http://www.seznam.cz");
	}
	
	@Test
	public void test() {
		String title=driver.getTitle();
		assertTrue("Stránka nemá titulek",title.length() > 0);
		System.out.println("Titulek stránky: "+title);
	}
}