我经历过下一个场景:
我是否需要以特定方式同步测试数据?如果按钮状态(在活动#1 上)可以从其他测试活动更改(活动#2 )
这是我正在做的事情的例子:
首先测试应该更改按钮状态
TEST2 - 应该更改button1状态的测试
@RunWith(AndroidJUnit4.class)
public class ChangeBtnState extends MyIdle
{
@Rule
public ActivityTestRule<Activity#2> EspressoTestRule#2 = new ActivityTestRule<>(Activity#2.class, false, true);
private MyIdle IdlingRecourseActivity#2;
@Before
public void SetUpTest2()
{
EspressoTestRule#2.getActivity().getSupportFragmentManager().beginTransaction();
IdlingRecourseActivity#2 = (ESP_idling) EspressoTestRule#2.getActivity().getIdlingResource();
Espresso.registerIdlingResources(IdlingRecourseActivity#2);
}
@Test
public void StartTestRule2()
{
// Just some actions on activity#2 after which button1 state should be from STATE#1 to STATE#2
ViewInteraction ButtonSendtoOFF = Espresso.onView(allOf(ViewMatchers.withId(android.R.id.SomebuttonONact#2))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
ButtonSendtoOFF.preform(click()); // here click
}
}
@After
public void unregistereSetUpTest2()
{
if (IdlingRecourseActivity#2 != null)
{
Espresso.unregisterIdlingResources(IdlingRecourseActivity#2);
}
}
}
现在检查活动#1上的按钮状态是否已更改
@RunWith(AndroidJUnit4.class)
public class CheckBtnState extends MyIdle
{
@Rule
public ActivityTestRule<Activity#1> EspressoTestRule#1 = new ActivityTestRule<>(Activity#1.class, false, true);
private MyIdle IdlingRecourseActivity#1;
@Before
public void SetUpTest1()
{
EspressoTestRule#1.getActivity().getSupportFragmentManager().beginTransaction();
IdlingRecourseActivity#1 = (ESP_idling) EspressoTestRule#1.getActivity().getIdlingResource();
Espresso.registerIdlingResources(IdlingRecourseActivity#1);
}
@Test
public void StartTestRule1()
{
// Check some actions FROM activity#2 to change **button1** from STATE#1 to STATE#2
ViewInteraction ButtonSTATE = Espresso.onView(allOf(ViewMatchers.withId(android.R.id.Button1), withText("OFF"))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
//ButtonSTATE.preform(click()); // here click
}
@After
public void unregistereSetUpTest1()
{
if (IdlingRecourseActivity#1 != null)
{
Espresso.unregisterIdlingResources(IdlingRecourseActivity#1);
}
}
}
顺便说一下,我已经看了很多主题,甚至找到了意图的例子,但它对我没有用,也许应该有特定的结构。
如果您需要额外信息,请在评论中添加您的问题。
答案 0 :(得分:0)
问题是您正在编写两个测试,以便第二个测试依赖于第一个测试的状态。这是不正确的测试设计。每个测试都应该能够完全独立于任何其他测试运行。您需要重新考虑每个测试的测试内容。在影响第一个活动状态的第二个活动中会发生什么?你在使用let t = Object.create(this.prototype);
this.call(t);
吗?如果是这样,您对第二个活动的测试应验证是否从第二个活动设置了预期结果。此测试不应依赖第一项活动中的任何内容。