如果有两个测试,Android Test Orchestrator运行BeforeClass两次

时间:2018-03-08 13:08:07

标签: java android android-espresso

Android Test Orchestrator运行几次BeforeClass方法。由于我使用Espresso进行端到端测试,因此我调用一些APIS将一些用户创建为测试设置并为每次测试创建它们,这会减慢测试速度执行。

on gradle

testOptions {
    execution 'ANDROID_TEST_ORCHESTRATOR'
}
...
androidTestUtil 'com.android.support.test:orchestrator:1.0.1'



public class LoginTest extends IntegrationTest {
  @Rule
  public ActivityTestRule<LoginActivity> activityTestRule = new ActivityTestRule<LoginActivity>(LoginActivity.class);

  @BeforeClass
  static public void doThisFirstOnlyOnce() {
    Log.d("Testing_tag", "BEFORE CLASS");
  }

  @Before
  public void doThisFirst() {
    Log.d("Testing_tag", "BEFORE every test");
  }

  @After
  public void doThisLast() {
    Log.d("Testing_tag", "After every test");
  }

  @AfterClass
  static public void doThisLastOnlyOnce() {
    Log.d("Testing_tag", "AFTER CLASS");
  }

  @Test
  public void test1() {
    Log.d("Testing_tag", "Test 1");
  }

  @Test
  public void test2() {
    Log.d("Testing_tag", "Test 2");
  }
}

我对浓缩咖啡和其他咖啡使用相同的配置。

结果

03-08 13:38:50.978 18756-18782/com.app D/Testing_tag: BEFORE CLASS
03-08 13:38:51.844 18756-18782/com.app D/Testing_tag: BEFORE every test
03-08 13:38:51.844 18756-18782/com.app D/Testing_tag: Test 1
03-08 13:38:51.844 18756-18782/com.app D/Testing_tag: After every test
03-08 13:38:52.141 18756-18782/com.app D/Testing_tag: AFTER CLASS
03-08 13:38:53.503 18825-18851/? D/Testing_tag: BEFORE CLASS
03-08 13:38:54.366 18825-18851/com.app D/Testing_tag: BEFORE every test
03-08 13:38:54.366 18825-18851/com.app D/Testing_tag: Test 2
03-08 13:38:54.366 18825-18851/com.app D/Testing_tag: After every test
03-08 13:38:54.728 18825-18851/com.app D/Testing_tag: AFTER CLASS

你知道无论如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

@mcepl,问题是现场,我有同样的问题。 如果您使用Android Test Orchestrator并且拥有@BeforeClass和@AfterClass的方法,那么它们就会崩溃。我的意思是,在每次测试之前和之后都会调用它们。例如:

@BeforeClass

@ TEST1

@AfterClass

@BeforeClass

@ TEST2

@AfterClass

@BeforeClass

@ TEST3

@AfterClass

如果您不使用Android Test Orchestrator,则只调用一次该方法(默认行为)

@BeforeClass

@ TEST1

@ TEST2

@ TEST3

@AfterClass

以下是类似q的链接: @BeforeClass and @AfterClass called before and after each test

有解决方法吗?

<强> 解决方案:  我使用了不同的方法,它对我有用:

  • 使用以下命令按名称顺序设置运行测试:

@FixMethodOrder(MethodSorters.NAME_ASCENDING)

  • 使用名称创建方法:aaa_test_what_needs_to_be_done_once_before_all_test

  • 使用名称创建方法:zzz_test_what_needs_to_be_done_once_after_all_test

  • 将测试方法重命名为test _ ..