CodeGym /وبلاگ جاوا /Random-FA /ادعاهای جاوا
John Squirrels
مرحله
San Francisco

ادعاهای جاوا

در گروه منتشر شد
عبارت Assert در جاوا برای آزمایش فرضیات خاصی در مورد وضعیت یک برنامه در حین اجرا استفاده می شود. این کمک می کند تا به راحتی خطاها را شناسایی کرده و برنامه را اشکال زدایی کنید. یک عبارت ادعایی در جاوا با استفاده از کلمه کلیدی Java assert و به دنبال آن یک عبارت بولی نوشته می شود. اگر عبارت به درستی ارزیابی شود، ادعا در سکوت عبور می کند و برنامه کار خود را انجام می دهد. اگر به غلط ارزیابی شود، ادعا با شکست مواجه می شود و یک AssertionError پرتاب می شود. بیایید یک مثال از یک برنامه با ادعاهای جاوا داشته باشیم.

//Assertion in Java example
public class AssertDemo1 {
   public static void main(String[] args) {
       int x = 5;
       assert x == 5 : "x should be 5";
       System.out.println(x);
   }
}
در اینجا عبارت درست است، بنابراین برنامه فقط به کار خود ادامه می دهد. خروجی همان چیزی است که انتظار می رود:
5

مثال AssertionError

در جاوا، AssertionError یک زیر کلاس از کلاس Error است و زمانی که یک ادعا با شکست مواجه می شود، پرتاب می شود. اظهارات در جاوا معمولاً برای بررسی درستی پیش‌شرط‌ها، شرایط پس‌شرط یا ثابت‌ها استفاده می‌شوند. همانطور که در زیر گفتیم، زمانی که یک عبارت ادعایی نتواند به درستی ارزیابی شود، یک AssertionError پرتاب می شود. حالا بیایید برنامه خود را بازنویسی کنیم تا عبارت بولی نادرست باشد.

//AssertionError example
public class AssertDemo1 {
   public static void main(String[] args) {
       int x = 5;
       assert x == 7 : "x should be 7";
       //here should be AssertionError
       System.out.println(x);
   }
}
خوب، ما آن را اجرا می کنیم و خروجی آن…
5
قطعاً در مثال ما مشکلی پیش آمده است! ما باید در اینجا یک AssertionError داشته باشیم زیرا x ما 5 است و ادعا انتظار دارد که 7 باشد. اینجا چه اشکالی دارد؟ توجه به این نکته مهم است که اظهارات جاوا را می توان فقط در JVM غیرفعال کرد، بنابراین نباید از آنها به عنوان تنها ابزار بررسی خطا در برنامه استفاده شود. آنها برای اشکال زدایی و آزمایش مفید هستند، اما برای کد تولید نباید به آنها اعتماد کرد. بنابراین برای استفاده از ادعاها، باید آنها را با استفاده از گزینه vm -ea (یا -enableassertions) فعال کنید. اگر با خط فرمان کار می کنید، می توانید از دستور بعدی برای برنامه AssertDemo1 خود استفاده کنید:
java -ea AssertDemo1
اگر ادعاها را فعال کنید و همان برنامه را دوباره اجرا کنید، موارد زیر را دریافت خواهید کرد:
استثنا در رشته "main" java.lang.AssertionError: x باید در AssertDemo1.main 7 باشد(AssertDemo1.java:4)
نکته همین است.

نحوه فعال کردن استثناها در IntelliJ IDEA

  1. به منوی Run → Edit Configurations بروید...
  2. پارامتر -ea را در گزینه های خط VM وارد کنید
ادعاهای جاوا - 1اکنون ادعاها فعال هستند و می توانید از آنها استفاده کنید.

اظهارات برای تست واحد در جاوا

در جاوا، واحد تست تکنیکی است که شامل تست تک تک ماژول‌های کد برای اطمینان از کارکرد صحیح آنها می‌شود. اظهارات معمولاً در تست واحد در جاوا استفاده می شود تا تأیید شود که کد آزمایش شده همانطور که انتظار می رود کار می کند. در تست واحد، یک واحد کد، برای مثال یک روش خاص، به صورت مجزا آزمایش می شود تا اطمینان حاصل شود که در شرایط و ورودی های مختلف به درستی کار می کند. بیایید یک مثال داشته باشیم. در اینجا ما یک ماشین حساب ساده برای جمع، تفریق، ضرب و تقسیم 2 اعداد صحیح داریم.

public class MyMath {

   public static int add (int a, int b) {
       return a + b;
   }

   public static int sub (int a, int b) {
       return a - b;
   }

   public static int mult (int a, int b) {
       return a*b;
   }

   public static double div (int a, int b) {
       return a/b;
   }
}
البته سوالات زیادی در مورد این پیاده سازی وجود دارد (مثلاً اگر بزرگترین int را به عدد دیگری اضافه کنیم چه اتفاقی می افتد) اما فعلاً این پیاده سازی را همانطور که هست می گذاریم. حال بیایید کلاسی بنویسیم که در آن روش های کلاس myMath را با کمک تست های واحد تست کنیم . درست است، فقط دو نفر از آنها. در واقع، می‌توانید تست‌هایی بنویسید که اعتبار آرگومان‌ها را بررسی می‌کنند، اینکه آیا یک متد به موارد خاص رسیدگی می‌کند و غیره. اما در اینجا ما خود را به چند آزمایش برای اهداف نمایشی محدود می کنیم.

import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class MyMathTesting {
   @Test
   public void testAdd() {
       MyMath calculator = new MyMath();
       int sum = calculator.add(2, 3);
       assertEquals(5, sum);
   }

   @Test
   public void testSub() {
       MyMath calculator = new MyMath();
       int sub = calculator.sub(5, 2);
       assertEquals(3, sub);
   }

}
متد assertEquals ادعایی است که بررسی می کند که آیا دو مقدار برابر هستند یا خیر. اگر مقادیر برابر نباشند، یک AssertionError پرتاب می‌شود که نشان می‌دهد تست شکست خورده است. استفاده از ادعاها در تست های واحد می تواند به شما کمک کند تا اشکالات را پیدا کنید و اطمینان حاصل کنید که کد شما در شرایط و ورودی های مختلف به درستی کار می کند. سعی کنید خودتان چنین تست هایی را برای تقسیم و ضرب اضافه کنید. سخت نیست.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION