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

دستگرمی این هفته
برنامه زیر را در نظر بگیرید:
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

پاسخ
پاسخ صحیح: 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