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

دستگرمی این هفته
برنامه زیر را در نظر بگیرید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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

پاسخ
پاسخ صحیح: ۱۳۵۴۳۶۴۲
برای رسیدن به پاسخ صحیح، قبل از هر چیز باید معنای annotationهای بالای متدهای تست را بدانید.
مطابق با صفحه ۲۴ از اسلاید برنامهنویسی تستمحور با کمک JUnit:
متدی که با Before@ مشخص میشود، قبل از هر متد تست، یک بار اجرا میشود.
متدی که با After@ مشخص میشود، بعد از هر متد تست، یک بار اجرا میشود.
متدی که با BeforeClass@ مشخص میشود، فقط یک بار قبل از همه تستها اجرا میشود.
متدی که با AfterClass@ مشخص میشود، فقط یک بار بعد از همه تستها اجرا میشود.
با این توضیحات، پس تستها متدهای test1 و test2 به هر ترتیبی هم که اجرا شوند، حتما اول و یک بار متد initTestClass اجرا شده و عدد ۱ چاپ میشود و حتما در آخر هم یک بار متد endTestClass اجرا شده و عدد ۲ در آخر چاپ خواهد شد. یعنی باید داشته باشیم ۲ …۱
از طرفی دیگر، قبل و بعد هر کدام از تستها هم، یکبار متد setup و یک بار هم متد tearDown اجرا میشود. یعنی قبل از اجرای هر تست، عدد ۳ و بعد از اجرای هر تست، عدد ۴ چاپ خواهد شد.
به این ترتیب، اجرای این فایل تست، دو خروجی ممکن دارد. یکی ۱۳۵۴۳۶۴۲ و یکی هم ۱۳۶۴۳۵۴۲
.
.
.
آدرس کانال تلگرام: JavaCupIR@
آدرس اکانت توییتر: JavaCupIR@
آدرس صفحه اینستاگرام: javacup.ir
آدرس گروه لینکدین: Iranian Java Developers