2 回答

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
根據(jù)維基百科,開發(fā)測(cè)試是一個(gè)軟件開發(fā)過程,涉及廣泛的缺陷預(yù)防和檢測(cè)策略的同步應(yīng)用,以降低軟件開發(fā)風(fēng)險(xiǎn)、時(shí)間和成本,請(qǐng)參閱。
文件夾:
第一個(gè)( com.example.myapplication
) 用于實(shí)際源代碼。例如,活動(dòng)、服務(wù)、廣播接收器、內(nèi)容提供者、模型、實(shí)用程序等的 java/kotlin 文件。
第二個(gè)( com.example.myapplication(andoridTest)
) 用于在 android 操作系統(tǒng)上運(yùn)行的儀器測(cè)試。例如,假設(shè)我們有MainActivity
一個(gè)按鈕。單擊按鈕時(shí)會(huì)顯示帶有消息的 Toast。所以我們可以測(cè)試按鈕是否正常工作,如下所示(為簡(jiǎn)單起見,提供了導(dǎo)入):
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
import androidx.test.rule.ActivityTestRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.RootMatchers.withDecorView;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.not;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
@RunWith(AndroidJUnit4ClassRunner.class)
public class ExampleAndroidTest {
@Rule
public ActivityTestRule<Main2Activity> mActivityRule =
new ActivityTestRule<>(Main2Activity.class);
@Test
public void buttonClickShowingToast_isCorrect() {
onView(withId(R.id.bt_test)).perform(click());
onView(withText(R.string.toast_test))
.inRoot(withDecorView(not(
mActivityRule.getActivity().getWindow().getDecorView()
))).check(matches(isDisplayed()));
}
}
第三個(gè)( com.example.myapplication(test)) 用于可以在本地機(jī)器上運(yùn)行的單元測(cè)試,意味著不需要 android 操作系統(tǒng)。例如,我們正在創(chuàng)建一個(gè)計(jì)時(shí)器,并且我們有一個(gè)實(shí)用方法可以將秒數(shù)轉(zhuǎn)換為 HH:MM:SS 格式。方法是:
public static String getHoursMinutesSeconds(int seconds) {
int minutes = seconds / 60;
seconds %= 60;
int hours = minutes / 60;
minutes %= 60;
String strSec = Integer.toString(seconds);
String strMin = Integer.toString(minutes);
String strHour = Integer.toString(hours);
StringBuilder sb = new StringBuilder();
if (strHour.length() < 2) sb.append(0);
sb.append(strHour);
sb.append(':');
if (strMin.length() < 2) sb.append(0);
sb.append(strMin);
sb.append(':');
if (strSec.length() < 2) sb.append(0);
sb.append(strSec);
return sb.toString();
}
由于該方法不需要測(cè)試Android API 。它必須在本地機(jī)器上進(jìn)行測(cè)試(因?yàn)樗斓枚啵?。所以單元測(cè)試代碼:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import io.jachoteam.taxiapp.views.WaitingIndicatorView;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@RunWith(BlockJUnit4ClassRunner.class)
public class ExampleUnitTest {
@Test
public void getHoursMinutesSeconds_isCorrect1() {
String actualValue = WaitingIndicatorView.getHoursMinutesSeconds(1);
assertThat(actualValue, is(equalTo("00:00:01")));
}
@Test
public void getHoursMinutesSeconds_isCorrect2() {
String actualValue = WaitingIndicatorView.getHoursMinutesSeconds(60);
assertThat(actualValue, is(equalTo("00:01:00")));
}
}
為每個(gè)編寫的代碼單元編寫測(cè)試是最佳實(shí)踐。因?yàn)橥ㄟ^在早期階段提供錯(cuò)誤檢測(cè)(while fresh=))并在每次更改代碼時(shí)驗(yàn)證代碼,當(dāng)項(xiàng)目變大需要維護(hù)時(shí),它使開發(fā)人員的生活更輕松。

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
根據(jù)Android 文檔:
/test: 包含在主機(jī) JVM 上運(yùn)行的本地測(cè)試的代碼。
/androidtest 儀器測(cè)試,在操作系統(tǒng)上運(yùn)行。
/module-name: 這是程序源代碼所在的地方
添加回答
舉報(bào)