ورود

View Full Version : برنامه تان را مستقیم داخل IDE جرا کنید



abbasalim
دوشنبه 26 خرداد 1393, 20:55 عصر
بنام خدا
سلام
دوستان کسی با این کار کرده/ صرف میکنه؟

http://robolectric.org/

dasssnj
سه شنبه 27 خرداد 1393, 06:15 صبح
کجای IDE برنامه رو اجرا می کنه؟
برای این برنامه که خیلی از کد را باید عوض کنیم!

abbasalim
سه شنبه 27 خرداد 1393, 10:33 صبح
من زیاد سر در نیوردم

rubiks.kde
سه شنبه 27 خرداد 1393, 13:13 عصر
این فریمورک برنامه رو به اون صورت که فکر میکنید اجرا نمیکنه : همون طور که خودشون گفتن Robolectric (http://robolectric.org/) is a unit test framework حالا تفاوتی که با unit تست خود اندروید داره اینه که اونجا unit test باید روی شبیه ساز یا دیوایس اجرا بشه ولی در این فریمورک این طور نیست و توی همون سیستم و بروی jvm این کار صورت میگیره.


برای این برنامه که خیلی از کد را باید عوض کنیم!

اون کدهایی که نوشته شده در واقع کدهای مربوط به unit test هست.

طبق مهندسی نرم افزار برنامه نویس نیاز داره در یک مرحله تمام کلاس ها و توابع خودش رو تست کنه.یه راهش اینه که بیاد تک تک رو اجرا کنه خروجی رو ببینه چیه و بفهمه درست بوده یا نه که این اصلا کار حرفه ایی نیست.

روش بهتر استفاده از ابزار های unit test هست که شما میایی مثلا یک تابع رو به فریمورک میدی ورودی رو هم میدی و خروجی رو هم میگی باید این باشه.(مثلا بهش میگی func رو با ورودی x اجرا کن خروجی باید y باشه) فرم ورک این کار ورمیکنه و نتیجه درست یا نادرست بودن رو میده.شاید بگید این که میشه کار قبلی ولی نه این طور نیست .
خوبیتش اینه که امکانات مختلف رو در اختیار برنامه نویس میزارن و همچنین سرعت کار میره بالا.از طرفی تمام تست ها رو نوشتی و اماده داری و به محض تغییر دادن قسمتی از برنامه دوباره سریع هممه رو اجرا میکنی تا جایی رو نزده باشی خراب شه.

مثلا توی این تستی که خودش نوشته :

// Test class for MyActivity
@RunWith(RobolectricTestRunner.class)
public class MyActivityTest {

@Test
public void clickingButton_shouldChangeResultsViewText() throws Exception {
Activity activity = Robolectric.buildActivity(MyActivity.class).create ().get();

Button pressMeButton = (Button) activity.findViewById(R.id.press_me_button);
TextView results = (TextView) activity.findViewById(R.id.results_text_view);

pressMeButton.performClick();
String resultsText = results.getText().toString();
assertThat(resultsText, equalTo("Testing Android Rocks!"));
}
}

برنامه اصلی به این صورت است که توی برنامه یه دکمه داره(press_me_button) که اگه رو این کلیک بشه باید متن تکس ویو (results_text_view) بشه Testing Android Rocks .
حالا اگه بخوایی به صورت معمولی تست کنی باید برنامه روی گوشی اجرا کنی بعد خودت کلیک کنی ببینی میشه یا نه.
ولی توی تست اول میاد اکتیویتی رو میگیره و بعد button و textview رو پیدا میکنه و حالا روی button کلیک میکنه و نتیجه textview رو با متنی که انتظار داره بررسی میکنه که اگه با متن مورد نظر یکی نباشه خطا بده.

این کار توی روش اول حداقل ۵ دقیقه طول میکشه ولی توی این روش کمتر از ثانیه.

dasssnj
سه شنبه 27 خرداد 1393, 13:48 عصر
حالا اگه کاری که ما می کنیم مثل عوض کردن متن نباشه و دیده نشه چی؟
مثلا یه فایلی را آپلود کنه و ... .

rubiks.kde
سه شنبه 27 خرداد 1393, 14:04 عصر
حالا اگه کاری که ما می کنیم مثل عوض کردن متن نباشه و دیده نشه چی؟
مثلا یه فایلی را آپلود کنه و ... .

فرقی نداره هر کاری باشه.بالاخره شما از اجرای هر تابع و کد یه هدفی داری .هدف الان اینجا کلیک شدنه اونجا میشه آپلود.

dasssnj
چهارشنبه 28 خرداد 1393, 11:38 صبح
نه منظورم اینه که از کجا می فهمه فایل آپلود شده؟

rubiks.kde
چهارشنبه 28 خرداد 1393, 15:23 عصر
نه منظورم اینه که از کجا می فهمه فایل آپلود شده؟

شما خودتون در زمان واقعی چطوری متوجه میشید که فایل آپلود شده؟بالاخره شما هم برای تابع آپلود یه خروچی قرار دادی که مثلا اگه درست کار کرد true و اگر درست کار نکرد false برگردونه.
مثلا تابع شما به این صورت تعریف شده : public bool uploadFile(String fileName)
این دیگه به شما و تابعتون بستگی داره.اگر خروجی نداشته باشه که مشخص بشه آپلود شده یا نه خودتون چطوری متوجه میشید؟
حتما سرور رو نگاه میکنید؟