【问题标题】:How to add some one time initiation code in robolectric tests [duplicate]如何在 robolectric 测试中添加一些一次性启动代码 [重复]
【发布时间】:2015-05-19 19:22:03
【问题描述】:

如何在 robolectric Android 测试中添加一些一次性启动代码。

我们可以添加一些带有 @Before 注释的方法,该方法将在该类的测试运行之前运行,但我们可以在 Android robolectric 中添加一些在执行任何测试代码之前执行的代码。

【问题讨论】:

  • 你能举例说明为什么@before 还不够吗?
  • 你需要它在类的所有测试之前运行一次还是你需要它在所有类的所有测试之前运行一次?
  • @AlexFlorescu 一次用于所有测试和所有课程。

标签: java android junit robolectric


【解决方案1】:

使用 JUnit 的 @BeforeClass 注解。

class Test {
    @BeforeClass
    public static void doOnce()
        //Do once before any test case is run.
    }
}

【讨论】:

    【解决方案2】:

    解决方案 #1

    您可以使用继承或组合。例如。你可以创建TestBase 类:

    class TestBase {
       @Before
       protected setUp() {
          // code for all tests
       }
    }
    

    然后您的测试可以从中派生:

    @RunWith(RobolectricTestRunner.class)
    class SpecificTest extends TestBase {
       ...
    }
    

    解决方案 #2

    您还可以在方法中创建一些包含可重复代码的实用程序类,并在测试中的每个setUp() 方法中调用此方法。然后,您将不需要继承。示例:

    class Util {
       private Util() {}
       public static setUp() {
          // code for all tests
       }
    }
    

    您的测试可能如下所示:

    @RunWith(RobolectricTestRunner.class)
    class SpecificTest {
       @Before
       public setUp() {
          Util.setUp();
       }
    }
    

    【讨论】:

    • 但是每次测试扩展 TestBase 的类时,setUp 方法会运行吗?我想要的是一些像@before 一样执行的事件或方法,但在任何类的任何测试执行之前执行一次。
    • @AamirAbro 在实现TestLifeCycleApplicationTestApplication 中尝试beforeTest()。见robolectric.org/custom-test-runner
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多