جعبه ابزار تست نویسی من در جاوا

ما جاوا کاریم!برای تست نوشتن از 4 JUnit استفاده می کنم و برای assert کردن از hamcrest.ولی چون هر دفعه یادم میره چی و باید از کجا import کنم، و این کتابخونه ها هم یکم اشتراکات دارن، یک سری مقدمات و این جا می نویسم که یادم نره.سوال ۱: چطور import static کنیم؟متد های زیادی و لازم می شه که import static کنیم. برای این کار، اسم متد و می نویسیم و بعد `alt+ctrl+space‍` و می زنیم. وظیفه ی این hotkey باز کردن Import Settings است.press alt+ctrl+space to open import settings. then use alt+enter for import staticدر حالتی که منو import settings باز شده، با فشردن alt+enter، متد انتخاب شده static import می شود.همچنین اگر یک متد static را با استفاده از import کردن کلاس آن استفاده کرده باشیم، می توانیم با alt+enter تبدیل به static import کنیم.press alt+enter to static import static methods of a classسوال ۲: از کدام متد های assertThat استفاده کنیم؟دو متد 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 ها استفاده کنیم؟متد های معمول matcher مانند is یا equalTo در دو کلاس زیر وجود دارند.org.hamcrest.Matchers org.hamcrest.CoreMatchersبرای فهم تفاوت این کلاس ها به نکات زیر دقت کنید:کلاس های اصلی Matcher داخل پکیج با نام org.hamcrest.core تعریف شده اند (مانند Is که دارای متد استاتیک is است.) و تمام متد های موجود در هر دو کلاس فوق، فراخوانی ها را به Matcher های اصلی موجود در org.hamcrest.core دلیگیت (delegate) می گنند.کلاس Matchers در hamcrest-all وجود دارد اما در hamcrest-core وجود ندارد. یعنی اگر در حال استفاده از hamcrest-core هستید، امکان استفاده از متد های موجود در Matchers را نخواهید داشت.در Matchers متد های بیشتری وجود دارد.همان طور که در شرح توزیع های hamcrst قدیمی (کمتر از نسخه ی 2) در وبلاگ این فریم ورک شرح داده شده است، hamcrest-all مجموع همه jar فایل هایی است که با عنوان hamcrest منتشر می شد.در نتیجه می توانیم تمام متد های موجود در Matchers را static imort کنیم.خلاصه import ها:import org.junit.*; import static org.junit.Assert.*; import static org.hamcrest.Matchers.*;اعمال تنظیمات مطلوب روی IntelliJ Ideaمعمولا این دو Live Template را هم به Intellij اضافه می کنم:tstimport import org.junit.*; import static org.junit.Assert.*; import static org.hamcrest.Matchers.*;وtstmethod @Test @Ignore public void $methodName$() { fail(&quotnot implemented yet&quot); }همچنین در بخش File and Code Templates -> Code -> JUnit4 Test Clss می توان تمپلیت فایل را به این شکل تغییر داد:import org.junit.*; import static org.junit.Assert.*; import static org.hamcrest.Matchers.*; #parse(&quotFile Header.java&quot) public class ${NAME} { @Test public void nothing() { } ${BODY} }در این صورت وقتی روی کلاس got to Test می زنیم (ctrl+shift+T) و یک کلاس JUnit 4 جدید ایجاد می کنیم، از قالب فوق استفاده می شود. برای رفتن از کلاس تست به Subjetct Class هم می توان از ctrl+shift+T استفاده کرد.