ما جاوا کاریم!
برای تست نوشتن از 4 JUnit استفاده می کنم و برای assert کردن از hamcrest.
ولی چون هر دفعه یادم میره چی و باید از کجا import کنم، و این کتابخونه ها هم یکم اشتراکات دارن، یک سری مقدمات و این جا می نویسم که یادم نره.
متد های زیادی و لازم می شه که import static کنیم. برای این کار، اسم متد و می نویسیم و بعد `alt+ctrl+space` و می زنیم. وظیفه ی این hotkey باز کردن Import Settings است.

در حالتی که منو import settings باز شده، با فشردن alt+enter، متد انتخاب شده static import می شود.
همچنین اگر یک متد static را با استفاده از import کردن کلاس آن استفاده کرده باشیم، می توانیم با alt+enter تبدیل به static import کنیم.

دو متد assertThat معمول برای استفاده از Matcher های hamcrest وجود دارد. این سه متد استاتیک عبارتند از:
public static <T> void assertThat(T actual, Matcher<? super T> matcher) public static <T> void assertThat(String reason, T actual, Matcher<? super T> matcher)
این سه متد، در هر دو کلاس زیر وجود دارند. از کدام استفاده کنیم؟
org.junit.Assert org.hamcrest.MatcherAssert
پاسخ:
متد های موجود در org.junit.Assert هم متد های موجود در org.hamcrest.MatcherAssert را فراخوانی می کنند. با توجه به این که متد های کاربردی دیگری (سایر assert ها و همچنین متد fail) در این کلاس وجود دارد، بهتر است تمام متد های موجود در این کلاس import static شوند.
متد های معمول matcher مانند is یا equalTo در دو کلاس زیر وجود دارند.
org.hamcrest.Matchers org.hamcrest.CoreMatchers
برای فهم تفاوت این کلاس ها به نکات زیر دقت کنید:
در نتیجه می توانیم تمام متد های موجود در Matchers را static imort کنیم.
import org.junit.*; import static org.junit.Assert.*; import static org.hamcrest.Matchers.*;
معمولا این دو Live Template را هم به Intellij اضافه می کنم:
tstimport import org.junit.*; import static org.junit.Assert.*; import static org.hamcrest.Matchers.*;
و
tstmethod @Test @Ignore public void $methodName$() { fail("not implemented yet"); }
همچنین در بخش File and Code Templates -> Code -> JUnit4 Test Clss می توان تمپلیت فایل را به این شکل تغییر داد:
import org.junit.*; import static org.junit.Assert.*; import static org.hamcrest.Matchers.*; #parse("File Header.java") public class ${NAME} { @Test public void nothing() { } ${BODY} }
در این صورت وقتی روی کلاس got to Test می زنیم (ctrl+shift+T) و یک کلاس JUnit 4 جدید ایجاد می کنیم، از قالب فوق استفاده می شود. برای رفتن از کلاس تست به Subjetct Class هم می توان از ctrl+shift+T استفاده کرد.