<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Ahmad Hoghooghi</title>
        <link>https://virgool.io/feed/@ahmad.hoghooghi</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-07-06 14:09:05</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/8912/avatar/avatar.png?height=120&amp;width=120</url>
            <title>Ahmad Hoghooghi</title>
            <link>https://virgool.io/@ahmad.hoghooghi</link>
        </image>

                    <item>
                <title>جعبه ابزار تست نویسی من در جاوا</title>
                <link>https://virgool.io/coderlife/my-test-toolkit-with-java-junit-hamcrest-intellij-ozsa0jhxdmgw</link>
                <description>ما جاوا کاریم!برای تست نوشتن از 4 JUnit استفاده می کنم و برای assert کردن از  hamcrest.ولی چون هر دفعه یادم میره چی و باید از کجا import کنم، و این کتابخونه ها هم یکم اشتراکات دارن، یک سری مقدمات و این جا می نویسم که یادم نره.سوال ۱: چطور import static کنیم؟متد های زیادی و لازم می شه که import static کنیم. برای این کار، اسم متد و می نویسیم و بعد &#x60;alt+ctrl+space‍&#x60; و می زنیم. وظیفه ی این 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)
public static &lt;T&gt; void assertThat(String reason, T actual, Matcher&lt;? super T&gt; 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(&amp;quotnot implemented yet&amp;quot);
}همچنین در بخش File and Code Templates -&gt; Code -&gt; JUnit4 Test Clss می توان تمپلیت فایل را به این شکل تغییر داد:import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
#parse(&amp;quotFile Header.java&amp;quot)
public class ${NAME} {
    @Test
    public void nothing() {

     }
    ${BODY}
}در این صورت وقتی روی کلاس 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 16:08:20 +0430</pubDate>
            </item>
                    <item>
                <title>نصب جاوا ۱۱ روی فدورا ۳۰</title>
                <link>https://virgool.io/@ahmad.hoghooghi/%D9%86%D8%B5%D8%A8-%D8%AC%D8%A7%D9%88%D8%A7-%DB%B1%DB%B1-%D8%B1%D9%88%DB%8C-%D9%81%D8%AF%D9%88%D8%B1%D8%A7-%DB%B3%DB%B0-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
java-11-openjdk-devel.x86_64 : OpenJDK Development Environment 11البته با این دستور:sudo dnf install java-11-openjdk
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
/usr/bin/java
[ahmad@localhost java]$ ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 Jul 19 14:02 /usr/bin/java -&gt; /etc/alternatives/java
[ahmad@localhost ~]$ ll /etc/alternatives/java
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
[ahmad@localhost jvm]$ ls -la
drwxr-xr-x.  5 root root 4096 Jul 19 14:02 java-11-openjdk-11.0.3.7-5.fc30.x86_64
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
/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
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 17:12:36 +0430</pubDate>
            </item>
            </channel>
</rss>