<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های Ahmad Hoghooghi</title><link>https://virgool.ir/feed/@ahmad.hoghooghi</link><description></description><language>fa</language><pubDate>2026-11-10 16:18:07</pubDate><image><url>https://files.virgool.ir/upload/users/8912/avatar/avatar.png</url><title>Ahmad Hoghooghi</title><link>https://virgool.ir/@ahmad.hoghooghi</link></image><item><title>جعبه ابزار تست نویسی من در جاوا</title><link>https://virgool.ir/coderlife/my-test-toolkit-with-java-junit-hamcrest-intellij-ozsa0jhxdmgw</link><description>ما جاوا کاریم!برای تست نوشتن از 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 &lt;T&gt; void assertThat(T actual, Matcher&lt;? super T&gt; matcher)&#xA;public static &lt;T&gt; void assertThat(String reason, T actual, Matcher&lt;? super T&gt; matcher)این سه متد، در هر دو کلاس زیر وجود دارند. از کدام استفاده کنیم؟org.junit.Assert&#xA;org.hamcrest.MatcherAssertپاسخ:متد های موجود در org.junit.Assert هم متد های موجود در org.hamcrest.MatcherAssert را فراخوانی می کنند. با توجه به این که متد های کاربردی دیگری (سایر assert ها و همچنین متد fail) در این کلاس وجود دارد، بهتر است تمام متد های موجود در این کلاس import static شوند.سوال ۳: از کدام Matcher ها استفاده کنیم؟متد های معمول matcher مانند is یا equalTo در دو کلاس زیر وجود دارند.org.hamcrest.Matchers&#xA;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.*;&#xA;import static org.junit.Assert.*;&#xA;import static org.hamcrest.Matchers.*;اعمال تنظیمات مطلوب روی IntelliJ Ideaمعمولا این دو Live Template را هم به Intellij اضافه می کنم:tstimport&#xA;import org.junit.*;&#xA;import static org.junit.Assert.*;&#xA;import static org.hamcrest.Matchers.*;وtstmethod&#xA;@Test&#xA;@Ignore&#xA;public void $methodName$() {&#xA;    fail(&#34;not implemented yet&#34;);&#xA;}همچنین در بخش File and Code Templates -&gt; Code -&gt; JUnit4 Test Clss می توان تمپلیت فایل را به این شکل تغییر داد:import org.junit.*;&#xA;import static org.junit.Assert.*;&#xA;import static org.hamcrest.Matchers.*;&#xA;#parse(&#34;File Header.java&#34;)&#xA;public class ${NAME} {&#xA;    @Test&#xA;    public void nothing() {&#xA;&#xA;     }&#xA;    ${BODY}&#xA;}در این صورت وقتی روی کلاس got to Test می زنیم  (ctrl+shift+T) و یک کلاس JUnit 4 جدید ایجاد می کنیم، از قالب فوق استفاده می شود. برای رفتن از کلاس تست به Subjetct Class هم می توان از ctrl+shift+T استفاده کرد.</description><category>Ahmad Hoghooghi</category><author>Ahmad Hoghooghi</author><pubDate>Tue, 24 Mar 2020 17:08:20 +0430</pubDate></item><item><title>نصب جاوا ۱۱ روی فدورا ۳۰</title><link>https://virgool.ir/@ahmad.hoghooghi/نصب-جاوا-۱۱-روی-فدورا-۳۰-dmuk0rlbpoj1</link><description>می خوام جاوا ۱۱ (OpenJDK) و با استفاده از command line روی fedora 30 نصب کنم. یک سری سوال دارم که به تدریج این جا خواهم نوشت و براشون دنبال جواب خواهم گشت.یک روش نصب دیگه هم وجود داره، تو اون روش یک فایل tar.gz و دانلود و بعد extract می کنیم و ... برای اطلاعات بیشتر می تونی به این لینک بری.کدوم پکیج و باید نصب کنم؟از دستورsudo dnf search jdkشروع کردم. لیست جون داری نشون داد در نتیجه سعی می کنم لیست و به این شکل محدود ترش کنم:dnf search jdk | grep 11 |grep x86و نتیجه به این شکل می شه:وقتی دستور dnf دنبال jdk برای معماری x86 می گرده به چی می رسه؟حالا سوال اینه که فرق اینا چیه و باید کدوم و نصب کنم. به نظر میاد باید این دو تا پکیج و نصب کنم.java-11-openjdk.x86_64 : OpenJDK Runtime Environment 11&#xA;java-11-openjdk-devel.x86_64 : OpenJDK Development Environment 11البته با این دستور:sudo dnf install java-11-openjdk&#xA;sudo dnf install java-11-openjdk-develحذف نسخه دیفالتچه کنم که نسخه ی openJDK قبلی که روی لینوکس هست پاک بشه؟این کار و نکن! پکیج های زیادی هستند که به openjdk ای که روی سیستم نصب هست وابسته اند. مثل libreoffice بهتره jdk ای که می خوای و نصب کنی و لینک ها رو به درستی برقرار کنی تا وقتی با command line کار می کنی به جاوایی که تو می خوای اشاره کنه. و اون هم سرجاش بمونه! به هر حال این دستور مقدمات پاک کردن و فراهم می کنه:sudo dnf remove java-1.8.0-openjdk-headless-1:1.8.0.201.b09-6.fc30.x86_64با اجرای این دستور متوجه می شی که چقدر از پکیج های مهم لینوکس و می خواد پاک کنه. پس دست نگه دار و مشکل و با استفاده از Linux Alternative System حل کن!چی به کجا لینک شده[ahmad@localhost java]$ which java&#xA;/usr/bin/java&#xA;[ahmad@localhost java]$ ll /usr/bin/java&#xA;lrwxrwxrwx. 1 root root 22 Jul 19 14:02 /usr/bin/java -&gt; /etc/alternatives/java&#xA;[ahmad@localhost ~]$ ll /etc/alternatives/java&#xA;lrwxrwxrwx. 1 root root 72 Jul 19 14:02 /etc/alternatives/java -&gt; /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-6.fc30.x86_64/jre/bin/javaحالا اگه بریم داخل این فولدر چی خواهیم دید؟ahmad@localhost ~]$ cd /usr/lib/jvm&#xA;[ahmad@localhost jvm]$ ls -la&#xA;drwxr-xr-x.  5 root root 4096 Jul 19 14:02 java-11-openjdk-11.0.3.7-5.fc30.x86_64&#xA;drwxr-xr-x.  3 root root 4096 Apr 26 06:55 java-1.8.0-openjdk-1.8.0.201.b09-6.fc30.x86_64روال مشابه ای و می شه برای دستور javac هم طی کرد.لینوکس دیفالت سیستم دیگه چیه؟شما PATH و ببین:[ahmad@localhost java-11-openjdk-11.0.3.7-5.fc30.x86_64]$ echo $PATH&#xA;/home/ahmad/.local/bin:/home/ahmad/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbinداخل usr/bin یک java هست که به etc/alternatives/ اشاره می کنه. از طرفی با استفاده از دستور زیر می تونیم بگیم اونی که توی etc/alternatives/ هست به کجا اشاره کنه. در نتیجه بدون این که نیاز باشه یک ورژن و پاک کنیم می تونیم همون و داشته باشیم ولی بگیم java ای که داخل usr/bin/ هست در نهایت از کدوم جاوا استفاده کنه:sudo update-alternatives --config javaتنظیم java دیفالتاز بخش بالا می تونیم ۲ رو انتخاب کنیم تا java نسخه ۱۱ به عنوان نسخه دیفالت انتخاب بشه. همین کار و برای دستور javac هم می شه چک کرد.تنظیم javac دیفالتدر نتیجه باید برای دستور های زیر نسخه ی مناسب و دریافت کنید:java --version&#xA;javac --versionکجا نصب می شه؟تو بخش «چی به کجا لینک شده» تقریبا جایی که جاوا نصب شده رو پیدا کردم. اگر هر دو پکیج openjdk و openjdk-devel و نصب کنیم در نهایت ب همچین منظره ای مواجه می شیم:محتویات binبه نظر میاد آنچه لازم داریم نصب شده. جاوا هم در داخل PATH هست. خب حالا بریم سراغ تنظیم JAVA_HOME.بهترین جا برای ویرایش PATH و تعریف JAVA_HOME کجاست؟نظر ها مختلفه ولی ما می ریم که JAVA_HOME و توی etc/profile/ تنظیم کنیم. جاهای دیگه ای هم هست که می شه این کار و کرد، تفاوتشون بماند برای بعد...تا این جای قضیه می دونم که جاوا داخل این فولدر نصب شده:usr/lib/jvm/java-11-openjdk-11.0.3.7-5.fc30.x86_64بهتره بدونیم توی فولدر etc/alternatives/ چند تا لینک به این فولدر وجود داره:links to java installation folder in /etc/alternatives به هر حال فایل etc/profile/ و برای ویرایش باز می کنم و این سطر و اضافه می کنم.فایل و ذخیره می کنیم و می بندیم، برای اعمال تغییرات فوق هم می تونیم این دستور و بزنیم:source /etc/profileبا این دستور می شه نتیجه نهایی کار و چک کرد:</description><category>Ahmad Hoghooghi</category><author>Ahmad Hoghooghi</author><pubDate>Fri, 19 Jul 2019 18:12:36 +0430</pubDate></item></channel></rss>