AndroidJUnit4.class + org.junit.Assume.assumeTrue = AssumptionViolatedException
AndroidJUnit4.class + org.junit.Assume.assumeTrue = AssumptionViolatedException
我已经设法将我的 Android 项目转移到 JUnit4,当然,我想这样做的主要原因是无法正常工作。如果有人在这里有想法,会喜欢任何帮助。
我要解决的问题是,如果构建未指向登台服务器,我想自动跳过某些测试。我已经用 BUILD_TYPE
设置了这个,它使用 gradle 注入基础 URL.
我在我的设置中设置了一个 assumeThat
子句,它可以正确识别构建何时未暂存,但它不会停止并忽略测试的其余部分,而是抛出异常并失败。
这是我的现场 API 测试的基础 class - 我用 @RunWith(AndroidJUnit4.class)
注释了从这里开始的下降,所以理论上这应该总是 运行 JUnit4 运行ner:
package com.[my package].nonuitests.liveservertests;
import android.support.test.runner.AndroidJUnit4;
import com.[my package].nonuitests.BaseAndroidTest;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Tests against the live API. All tests descending from this class will
* be ignored if the BUILD_TYPE is not staging.
*/
@RunWith(AndroidJUnit4.class)
public class BaseLiveServerTests extends BaseAndroidTest {
private static final String STAGE = "staging";
/******************
* SETUP/TEARDOWN *
******************/
@Override
public void setUp() throws Exception {
super.setUp();
//TODO: Y U NO WORK?!
//This should cause the rest of the test to be skipped if it fails,
//but is instead throwing an AssumptionViolatedException.
assumeTrue(STAGE.equals(BuildConfig.BUILD_TYPE));
}
}
那么,我的问题是:
- 有更好的方法吗?从理论上讲,这可以通过 flavor 来完成,但我早些时候尝试过,它让其他一切变得 way 更加复杂。
- 我的研究表明有一些东西 Google 没有在他们的 运行 中实现,这导致它爆炸了,但我很难弄清楚我 can/should 做了什么来解决这个问题。有什么建议我应该 subclass 让它按预期工作吗?
任何其他想法将不胜感激。谢谢!
编辑 (1/26/15 11:40am CST):根据 , I took a stab 将其实现为 @Rule
,但目前它仍然无法正常工作.这似乎是一条很有前途的道路,但目前行不通。
编辑 2(1/26/15 12:15pm CST):好的,。
https://github.com/junit-team/junit/wiki/Assumptions-with-assume
ad 2) 自定义运行程序可能会以不同方式处理 assume 语句。要修复它,您应该编写自己的 Android 运行器版本,并实现一种处理假设的方法,就像本机 JUnit 运行器所做的那样,或者为 android 测试运行器制造一个错误。
广告 1) 我建议:尝试使用 JUnit 规则:
http://www.codeaffine.com/2013/11/18/a-junit-rule-to-conditionally-ignore-tests/
http://cwd.dhemery.com/2010/12/junit-rules/
好的,最终它与 @Rules
一起工作 , although with significant changes since MethodRule
has been deprecated. Here's a gist 结果是什么 - 我会在完善它时尽量保持更新。
一些重要说明:
- 您必须在测试 class 中实例化您的
@Rule
,否则您将永远不会真正命中任何检查。
- 截至目前,这将 不会 将 Android 上的测试标记为忽略,它只会通过它而不会实际测试任何东西。
在 Junit 4.12 中它无法处理 tearDown
如果你有 tearDown,你必须添加一个带有你的条件的 if 语句,而不是 assumeTrue。我认为 Junit 的所有者说它不应该与 @After
一起工作
@After
override fun tearDown() {
if (junit == worksAgain()) {
我已经设法将我的 Android 项目转移到 JUnit4,当然,我想这样做的主要原因是无法正常工作。如果有人在这里有想法,会喜欢任何帮助。
我要解决的问题是,如果构建未指向登台服务器,我想自动跳过某些测试。我已经用 BUILD_TYPE
设置了这个,它使用 gradle 注入基础 URL.
我在我的设置中设置了一个 assumeThat
子句,它可以正确识别构建何时未暂存,但它不会停止并忽略测试的其余部分,而是抛出异常并失败。
这是我的现场 API 测试的基础 class - 我用 @RunWith(AndroidJUnit4.class)
注释了从这里开始的下降,所以理论上这应该总是 运行 JUnit4 运行ner:
package com.[my package].nonuitests.liveservertests;
import android.support.test.runner.AndroidJUnit4;
import com.[my package].nonuitests.BaseAndroidTest;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Tests against the live API. All tests descending from this class will
* be ignored if the BUILD_TYPE is not staging.
*/
@RunWith(AndroidJUnit4.class)
public class BaseLiveServerTests extends BaseAndroidTest {
private static final String STAGE = "staging";
/******************
* SETUP/TEARDOWN *
******************/
@Override
public void setUp() throws Exception {
super.setUp();
//TODO: Y U NO WORK?!
//This should cause the rest of the test to be skipped if it fails,
//but is instead throwing an AssumptionViolatedException.
assumeTrue(STAGE.equals(BuildConfig.BUILD_TYPE));
}
}
那么,我的问题是:
- 有更好的方法吗?从理论上讲,这可以通过 flavor 来完成,但我早些时候尝试过,它让其他一切变得 way 更加复杂。
- 我的研究表明有一些东西 Google 没有在他们的 运行 中实现,这导致它爆炸了,但我很难弄清楚我 can/should 做了什么来解决这个问题。有什么建议我应该 subclass 让它按预期工作吗?
任何其他想法将不胜感激。谢谢!
编辑 (1/26/15 11:40am CST):根据 @Rule
,但目前它仍然无法正常工作.这似乎是一条很有前途的道路,但目前行不通。
编辑 2(1/26/15 12:15pm CST):好的,
https://github.com/junit-team/junit/wiki/Assumptions-with-assume
ad 2) 自定义运行程序可能会以不同方式处理 assume 语句。要修复它,您应该编写自己的 Android 运行器版本,并实现一种处理假设的方法,就像本机 JUnit 运行器所做的那样,或者为 android 测试运行器制造一个错误。
广告 1) 我建议:尝试使用 JUnit 规则:
http://www.codeaffine.com/2013/11/18/a-junit-rule-to-conditionally-ignore-tests/ http://cwd.dhemery.com/2010/12/junit-rules/
好的,最终它与 @Rules
一起工作 MethodRule
has been deprecated. Here's a gist 结果是什么 - 我会在完善它时尽量保持更新。
一些重要说明:
- 您必须在测试 class 中实例化您的
@Rule
,否则您将永远不会真正命中任何检查。 - 截至目前,这将 不会 将 Android 上的测试标记为忽略,它只会通过它而不会实际测试任何东西。
在 Junit 4.12 中它无法处理 tearDown
如果你有 tearDown,你必须添加一个带有你的条件的 if 语句,而不是 assumeTrue。我认为 Junit 的所有者说它不应该与 @After
一起工作@After
override fun tearDown() {
if (junit == worksAgain()) {