دستگرمی

دستگرمی یازدهم

دستگرمی این هفته

برنامه زیر را در نظر بگیرید:

public class Tests {
	@BeforeClass
	public static void initTestClass() {
		System.out.print(1);
	}
	@AfterClass
	public static void endTestClass() {
		System.out.print(2);
	}
	@Before
	public void setup() {
		System.out.print(3);
	}
	@After
	public void tearDown() {
		System.out.print(4);
	}
	@Test
	public void test1() {
		System.out.print(5);
	}
	@Test
	public void test2() {
		System.out.print(6);
	}
}

کدام گزینه می‎تواند خروجی کد فوق باشد؟

  • 13543642 (54%, 7 رای)
  • 135642 (23%, 3 رای)
  • 13542642 (15%, 2 رای)
  • 123456 (8%, 1 رای)
  • 1234567 (0%, 0 رای)
  • 654321 (0%, 0 رای)
  • 531246 (0%, 0 رای)

مجموع رای ها: 13

Loading ... Loading ...

پاسخ

پاسخ صحیح: 13543642

برای رسیدن به پاسخ صحیح، قبل از هر چیز باید معنای annotationهای بالای متدهای تست را بدانید.

مطابق با صفحه 24 از اسلاید برنامه‌نویسی تست‌محور با کمک JUnit:

متدی که با Before@ مشخص می‌شود، قبل از هر متد تست، یک بار اجرا می‎شود.

متدی که با After@ مشخص می‌شود، بعد از هر متد تست، یک بار اجرا می‌شود.

متدی که با BeforeClass@ مشخص می‌شود، فقط یک بار قبل از همه تست‌ها اجرا می‌شود.

متدی که با AfterClass@ مشخص می‌شود، فقط یک بار بعد از همه تست‌ها اجرا می‌شود.

با این توضیحات، پس تست‌ها متدهای test1 و test2 به هر ترتیبی هم که اجرا شوند، حتما اول و یک بار متد initTestClass اجرا شده و عدد 1 چاپ می‎شود و حتما در آخر هم یک بار متد endTestClass اجرا شده و عدد 2 در آخر چاپ خواهد شد. یعنی باید داشته باشیم 2 …1

از طرفی دیگر، قبل و بعد هر کدام از تست‎ها هم، یکبار متد setup و یک بار هم متد tearDown اجرا می‎شود. یعنی قبل از اجرای هر تست، عدد 3 و بعد از اجرای هر تست، عدد 4 چاپ خواهد شد.

به این ترتیب، اجرای این فایل تست، دو خروجی ممکن دارد. یکی 13543642 و یکی هم 13643542

.

.

.

با ما همراه باشید

آدرس کانال تلگرام: JavaCupIR@

آدرس اکانت توییتر: JavaCupIR@

آدرس صفحه اینستاگرام: javacup.ir

آدرس گروه لینکدین: Iranian Java Developers

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا