【问题标题】:Android Test Orchestrator is running the BeforeClass Twice if there are two test如果有两个测试,Android Test Orchestrator 将运行 BeforeClass Twice
【发布时间】:2018-03-08 13:08:07
【问题描述】:

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

毕业了

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

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

标签: java android android-espresso


【解决方案1】:

@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_..开头。

【讨论】:

    猜你喜欢
    • 2018-07-21
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 2018-09-30
    相关资源
    最近更新 更多