Три варианта, все из которых выполняются через gradlew connectedAndroidTest
или cust О.М. Gradle задача:
1. Используйте org.junit.Assume
Assumptions with assume - junit-team/junit Wiki - Github От:
по умолчанию JUnit бегун лечит тесты В с несостоятельными предположениями, игнорировались. Пользовательские бегуны могут вести себя по-разному.
К сожалению, android.support.test.runner.AndroidJUnit4
(com.android.support.test:runner:0.2
) бегун угощения провала попытки предположений неудачных испытаний.
После того, как это поведение фиксируется следующее будет работать (см Вариант 3 ниже isScreenSw600dp()
источника):
телефон только: все методы испытаний в классе
@Before
public void setUp() throws Exception {
assumeTrue(!isScreenSw600dp());
// other setup
}
Конкретные методы испытаний
@Test
public void testA() {
assumeTrue(!isScreenSw600dp());
// test for phone only
}
@Test
public void testB() {
assumeTrue(isScreenSw600dp());
// test for tablet only
}
2. Использование пользовательского JUnit Правила
От A JUnit Rule to Conditionally Ignore Tests:
Это привело нас к созданию ConditionalIgnore аннотации и соответствующее правила зацепить его в JUnit выполнение. Дело в том, простой и лучше всего объяснить на примере:
public class SomeTest {
@Rule
public ConditionalIgnoreRule rule = new ConditionalIgnoreRule();
@Test
@ConditionalIgnore(condition = NotRunningOnWindows.class)
public void testFocus() {
// ...
}
}
public class NotRunningOnWindows implements IgnoreCondition {
public boolean isSatisfied() {
return !System.getProperty("os.name").startsWith("Windows");
}
}
ConditionalIgnoreRule
код здесь: JUnit rule to conditionally ignore test cases.
Этот подход может быть легко модифицирован для реализации метода isScreenSw600dp()
в Варианте 3 ниже.
3. Используйте условные в методах испытаний
Это наименее элегантный вариант, в частности, потому, что полностью пропущено тесты будут представлены как прошел, но это очень легко осуществить. Вот вам полный образец тестового класса, который поможет вам начать работу:
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;
import android.util.DisplayMetrics;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
@RunWith(AndroidJUnit4.class)
public class DeleteMeTest extends ActivityInstrumentationTestCase2<MainActivity> {
private MainActivity mActivity;
private boolean mIsScreenSw600dp;
public DeleteMeTest() {
super(MainActivity.class);
}
@Before
public void setUp() throws Exception {
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
setActivityInitialTouchMode(false);
mActivity = this.getActivity();
mIsScreenSw600dp = isScreenSw600dp();
}
@After
public void tearDown() throws Exception {
mActivity.finish();
}
@Test
public void testPreconditions() {
onView(withId(R.id.your_view_here))
.check(matches(isDisplayed()));
}
@Test
public void testA() {
if (!mIsScreenSw600dp) {
// test for phone only
}
}
@Test
public void testB() {
if (mIsScreenSw600dp) {
// test for tablet only
}
}
@Test
public void testC() {
if (mIsScreenSw600dp) {
// test for tablet only
} else {
// test for phone only
}
// test for both phone and tablet
}
private boolean isScreenSw600dp() {
DisplayMetrics displayMetrics = new DisplayMetrics();
mActivity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
float widthDp = displayMetrics.widthPixels/displayMetrics.density;
float heightDp = displayMetrics.heightPixels/displayMetrics.density;
float screenSw = Math.min(widthDp, heightDp);
return screenSw >= 600;
}
}
Есть ли U, использующий Android Studio? – Xcihnegn
Было бы здорово, если бы были какие-то аннотации, такие как '@ Phone' и' @ Tablet', или '@DeviceConfig (smallestWidth = 480)', так что вы можете аннотировать свои методы тестирования этими аннотациями и в зависимости от типа вашего устройства , для выполнения или отсутствия конкретного метода тестирования. Это еще не существует, но было бы неплохо иметь ... просто говоря ... –