相关疑难解决方法(0)

Kotlin和新的ActivityTestRule:@Rule必须是公开的

我正在尝试在Kotlin中为我的Android应用程序进行UI测试.由于使用ActivityTestRule的新系统,我无法使其工作:它正确编译,并在运行时,我得到:

java.lang.Exception: The @Rule 'mActivityRule' must be public.
    at org.junit.internal.runners.rules.RuleFieldValidator.addError(RuleFieldValidator.java:90)
    at org.junit.internal.runners.rules.RuleFieldValidator.validatePublic(RuleFieldValidator.java:67)
    at org.junit.internal.runners.rules.RuleFieldValidator.validateField(RuleFieldValidator.java:55)
    at org.junit.internal.runners.rules.RuleFieldValidator.validate(RuleFieldValidator.java:50)
    at org.junit.runners.BlockJUnit4ClassRunner.validateFields(BlockJUnit4ClassRunner.java:170)
    at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:103)
    at org.junit.runners.ParentRunner.validate(ParentRunner.java:344)
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:74)
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:55)
    at android.support.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:38)
    at android.support.test.runner.AndroidJUnit4.<init>(AndroidJUnit4.java:36)
    at java.lang.reflect.Constructor.constructNative(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
    at android.support.test.internal.runner.junit4.AndroidAnnotatedBuilder.buildAndroidRunner(AndroidAnnotatedBuilder.java:57)
    at android.support.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.java:45)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runner.Computer.getRunner(Computer.java:38)
    at org.junit.runner.Computer$1.runnerForClass(Computer.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:98)
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:84)
    at org.junit.runners.Suite.<init>(Suite.java:79)
    at org.junit.runner.Computer.getSuite(Computer.java:26)
    at android.support.test.internal.runner.TestRequestBuilder.classes(TestRequestBuilder.java:691)
    at android.support.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:654)
    at android.support.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:329)
    at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:226)
    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
Run Code Online (Sandbox Code Playgroud)

以下是我宣称的mActivityRule:

RunWith(javaClass<AndroidJUnit4>())
LargeTest
public class RadisTest {

    Rule
    public val mActivityRule: ActivityTestRule<MainActivity> = …
Run Code Online (Sandbox Code Playgroud)

testing android kotlin android-espresso

246
推荐指数
5
解决办法
3万
查看次数

如何为JUnit测试用例运行启用全局超时?

这个问题建议使用@Test批注的timeout参数让JUnit在超时期限后强制停止测试.

但到目前为止,我们已经完成了5000次单元测试,我们希望建立一个策略,要求开发人员永远不要发布需要10秒以上才能完成的测试.该政策可能会说"瞄准<10秒",但我们希望确保在30秒后停止任何测试.(这些数字只是示例,我们的想法是为大多数用例定义"足够好"的东西,但这也确保事情不会"永远"运行)

现在我想知道是否有一种方法可以启用此类行为,而无需转入每个测试用例并添加该注释参数.

现有问题也没有帮助:我正在寻找一个更改来启用此功能,而不是每个测试类解决方案一个更改.一个中央的全球开关.每个文件或方法不是一个.

java junit timeout junit4 junit5

6
推荐指数
1
解决办法
1586
查看次数

我可以为套件中的所有测试应用时间限制

JUnit中是否有一种方法可以为套件中包含的所有测试定义全局超时/限制.

好吧,让我来解释一下.

我想将junit测试套件引入到将在每个构建上运行的遗留项目的构建系统中.该套件应包含快速运行的单元测试,但该项目在其测试源文件夹中具有混合的集成和单元测试集.

所以我的目标是为单元测试引入一个中央测试套件,它只包含那些能够在一定时限内运行的测试(每个测试单独进行).

我希望通过引入@Rule注释来强制执行该规则.

我试过这个:

@RunWith(Suite.class)
@SuiteClasses({...})
public class FastTestSuite{
    @Rule Timeout timeout = new Timeout(1);
}
Run Code Online (Sandbox Code Playgroud)

但这似乎并没有成功.我知道有一个事实,即测试的速度远低于1毫秒,但没有一个测试失败.

java junit4 junit-rule

5
推荐指数
1
解决办法
1593
查看次数

AndroidJUnitRunner + ActivityInstrumentationTestCase2 超时?

设置:

我继承的一个较旧的项目有很多遗留的仪器测试,我想对它们施加超时,因为它们中的很多都可以无限期地挂起,这使得很难获得测试报告。我正在将测试更新为 Junit4 样式,但目前它们都在扩展 ActivityInstrumentationTestCase2。

到目前为止尝试过:

AndroidJUnitRunner的文档中,它说要设置这个标志:

设置将应用于每个测试的超时(以毫秒为单位):-e timeout_msec 5000 ...

...所有参数也可以通过元数据标签在 AndroidManifest 中指定

我已经尝试将 AndroidJUnitRunner 配置添加到应用程序清单和测试清单,但 timeout_msec 元数据项到目前为止没有任何影响。

android-instrumentation android-junit

2
推荐指数
1
解决办法
1003
查看次数