<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>Michał Borek - tech blog &#187; junit</title>
	<atom:link href="http://www.greenpath.pl/tag/junit/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.greenpath.pl</link>
	<description>Programmer&#039;s point of view</description>
	<lastBuildDate>Fri, 30 Dec 2011 22:20:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Testowanie ze Springiem &#8211; nowa porcja wiedzy :)</title>
		<link>http://www.greenpath.pl/2009/11/testowanie-ze-springiem-nowa-porcja-wiedzy/</link>
		<comments>http://www.greenpath.pl/2009/11/testowanie-ze-springiem-nowa-porcja-wiedzy/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 21:17:16 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[spring framework]]></category>
		<guid isPermaLink="false">http://www.greenpath.pl/?p=131</guid>
		<description><![CDATA[Chciałbym napisać nieco więcej na temat testowania w Springu i przytoczę tutaj kilka luźno związanych, ale wartych zapamiętania reguł. Przede wszystkim, kiedy tworzymy testy integracyjne i tworzymy kontekst aplikacji musimy wiedzieć, że kontekst ten tworzony jest raz na cały cykl testów. Jest to ważne, gdyż czasem stan naszych beanów może się zmienić podczas testów i [...]]]></description>
			<content:encoded><![CDATA[<p>Chciałbym napisać nieco więcej na temat testowania w Springu i przytoczę tutaj kilka luźno związanych, ale wartych zapamiętania reguł.</p>
<p>Przede wszystkim, kiedy tworzymy testy integracyjne i tworzymy kontekst aplikacji musimy wiedzieć, że kontekst ten tworzony jest raz na cały cykl testów. Jest to ważne, gdyż czasem stan naszych beanów może się zmienić podczas testów i może to powodować nieprawidłowe wykonywanie kolejnych testów. Aby zapobiec temu problemowi wykorzystujemy dodatkową adnotację:</p>
<p><strong>@DirtiesContext</strong> &#8211; adnotacja do metody, która określa, że konspekt aplikacji mógł zostać zmieniony przez test i musi zostać konspekt musi zostać stworzony od nowa.</p>
<p>Ogólnie sam fakt, że kontekst tworzony jest raz jest bardzo korzystny dla nas, gdyż skraca to znacznie czas wykonywania testów.</p>
<p>Poniżej opiszę jeszcze 2 ciekawe adnotacje, które znacznie rozszerzają możliwości testów.</p>
<p>Pierwszą z nich jest:</p>
<p><strong>@Timed(millis=1000)</strong> &#8211; która, jak można się domyślić, określa w jakim maksymalnym czasie, test ma zostać wykonany. Jeżeli test wykonuje się dłużej, nie jest on spełniony.</p>
<p><strong>@Repeat(10)</strong> &#8211; test wykonywany jest wielokrotnie (w tym wypadku 10 razy) i tylko w przypadku, gdy wszystkie 10 testów przejdzie, test zostanie spełniony.</p>
<p>Nie jest to cała lista adnotacji, jednakże  są to najciekawsze (wraz z tymi z poprzedniego wpisu) wg mojego uznania <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Po więcej odsyłam do referencji Springa <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2009/11/testowanie-ze-springiem-nowa-porcja-wiedzy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java &#8211; Spring 2.5.6 testowanie DAO z użyciem adnotacji</title>
		<link>http://www.greenpath.pl/2009/11/java-spring-2-5-6-testowanie-dao-z-uzyciem-adnotacji/</link>
		<comments>http://www.greenpath.pl/2009/11/java-spring-2-5-6-testowanie-dao-z-uzyciem-adnotacji/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 23:17:46 +0000</pubDate>
		<dc:creator>Michał Borek</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[dao]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[spring framework]]></category>
		<guid isPermaLink="false">http://www.greenpath.pl/?p=126</guid>
		<description><![CDATA[Ostatnimi czasy siedzę trochę w Spring Framework, frameworku dla Javy. Doszedłem do etapu testów i stwierdziłem, że godnym opisania będzie sposób testowania metod opartych o transakcje, gdyż ciekawym jest fakt iż wszystko co odbywa się w danych testach (dodawanie danych, edycja itd.) jest następnie cofane do wersji pierwotnej (wywoływany jest rollback na transakcji) i dzieje [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnimi czasy siedzę trochę w Spring Framework, frameworku dla Javy. Doszedłem do etapu testów i stwierdziłem, że godnym opisania będzie sposób testowania metod opartych o transakcje, gdyż ciekawym jest fakt iż wszystko co odbywa się w danych testach (dodawanie danych, edycja itd.) jest następnie cofane do wersji pierwotnej (wywoływany jest rollback na transakcji) i dzieje się to automatycznie.</p>
<p>Poniżej znajduje się przykładowa klasa wraz z metodami testującymi. Wszystko oparte jest na adnotacjach, więc nie ma problemu:</p>
<pre>@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:test-config.xml"
public class UserAccountDaoImplTest {
    @Resource
    UserAccountDaoImpl userAccountDaoImpl;
    @Test
    @Transactional
    public void testSaveUser() {
        System.out.println("saveUser");
        UserAccount transientInstance = new UserAccount();
        transientInstance.setEmail("email@mail.con");
        transientInstance.setEnabled(true);
        userAccountDaoImpl.saveUser(transientInstance);
        UserAccount userFromDb = userAccountDaoImpl.getByEmail("email@mail.con);
        assertNotNull("User should be not null", userFromDb);
assertTrue("User should be enabled", userFromDb.isEnabled());
        assertTrue("User should be non locked", userFromDb.isAccountNonLocked());
    }
    @Test(expected = ConstraintViolationException.class)
    @Transactional
    public void testSaveUserDuplicateEmail() {
        System.out.println("saveUserDuplicateEmail");
        UserAccount transientInstance = new UserAccount();
        transientInstance.setEmail("michal@somedomain.pl");
        userAccountDaoImpl.saveUser(transientInstance);
    }
    @Test
    @NotTransactional
    public void testGetUserById() {
        System.out.println("getUserById");
        long id = 1L;
        UserAccount result = userAccountDaoImpl.getUserById(id);
        assertNotNull("User with id " + id + " should be found", result);
        assertEquals(new Long(id), result.getId())        id = 667L;
        result = userAccountDaoImpl.getUserById(id);
        assertNull("User with id " + id + " should not be found", result);
    @Test(expected = UsernameNotFoundException.class)
    @NotTransactional
    public void testGetByEmailNoUser() {
        System.out.println("getByEmailNoUser");
        String email = "someone@gnail.con";
        userAccountDaoImpl.getByEmail(email);
    }
}</pre>
<p>Początkowo inicjujemy kontekst springa (definiujemy która klasa się tym zajmie i dodajemy plik konfiguracyjny).</p>
<p>@RunWith(SpringJUnit4ClassRunner.class)<br />
@ContextConfiguration(locations = &#8220;classpath:test-config.xml&#8221;)</p>
<p>Następnie musimy wstrzyknąć do testu instancję którą testujemy, wykorzystujemy do tego adnotację @Resource:</p>
<p>@Resource<br />
UserAccountDaoImpl userAccountDaoImpl;</p>
<p>Nie będę tutaj opisywał adnotacji czystego JUnita, zwrócę jedynie uwagę na adnotacje potrzebne przy testowaniu danych opartych o DB. Tak więc mamy:</p>
<p>@Transactional &#8211; określa nam, że dana metoda korzysta z transakcji i ma być wykonany rollback<br />
@NotTransactional &#8211; odwrotnie do tego wyżej <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Dodatkowo, co nie zostało pokazane na powyższym przykładzie, możemy skorzystać z adnotacji @Rollback(false) jeżeli nie chcemy, aby wykonywany był rollback po wykonaniu testu.</p>
<p>Mam nadzieję, że powyższy (działający u mnie) przykład komuś się przyda. Ja chwilę spędziłem, zanim doprowadziłem go do porządku, choć okazało się to niezwykle proste (wynik końcowy) <img src='http://www.greenpath.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.greenpath.pl/2009/11/java-spring-2-5-6-testowanie-dao-z-uzyciem-adnotacji/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

