Java AndroidJUnit4.class+;org.junit.aspect.assumedtrue=AssumptionViolatedException
我已经设法让我的Android项目过渡到JUnit4,当然我想做的主要原因是它不起作用。如果这里有人有想法,我会很乐意帮忙的 我试图解决的问题是,如果构建没有指向临时服务器,我想自动跳过某些测试。我已经用一个Java AndroidJUnit4.class+;org.junit.aspect.assumedtrue=AssumptionViolatedException,java,android,junit,junit4,android-testing,Java,Android,Junit,Junit4,Android Testing,我已经设法让我的Android项目过渡到JUnit4,当然我想做的主要原因是它不起作用。如果这里有人有想法,我会很乐意帮忙的 我试图解决的问题是,如果构建没有指向临时服务器,我想自动跳过某些测试。我已经用一个构建类型设置了它,它使用gradle注入基本URL 我在我的设置中设置了一个assumethi子句,它正确地标识了构建何时没有登台,但是它没有停止并忽略测试的其余部分,而是抛出一个异常并失败 这是我的实时API测试的基类-我已经用@RunWith(AndroidJUnit4.class)注释
构建类型设置了它,它使用gradle注入基本URL
我在我的设置中设置了一个assumethi
子句,它正确地标识了构建何时没有登台,但是它没有停止并忽略测试的其余部分,而是抛出一个异常并失败
这是我的实时API测试的基类-我已经用@RunWith(AndroidJUnit4.class)
注释了从这个基类开始的下降,所以理论上这应该总是用JUnit4运行程序运行:
package com.[my package].nonuitests.liveservertests;
导入android.support.test.runner.AndroidJUnit4;
导入com.[my package].nonuitests.BaseAndroidTest;
导入org.junit.Test;
导入org.junit.runner.RunWith;
/**
*针对实时API的测试。从该类派生的所有测试都将
*如果生成类型不是暂存,则忽略。
*/
@RunWith(AndroidJUnit4.class)
公共类BaseLiveServerTests扩展了BaseAndroidTest{
私有静态最终字符串STAGE=“staging”;
/******************
*安装/拆卸*
******************/
@凌驾
public void setUp()引发异常{
super.setUp();
//托多:你没有工作?!
//如果测试失败,则应跳过测试的其余部分,
//而是抛出一个AssumptionViolatedException。
假设为true(STAGE.equals(BuildConfig.BUILD_TYPE));
}
}
所以,我的问题是:
有更好的方法吗?理论上,这可以通过口味来实现,但我之前尝试过,这让其他事情变得更加复杂
我的研究表明,谷歌没有在他们的跑步者身上实现某种东西,这导致了这一问题的爆发,但我花了很长时间才弄清楚我能/应该做些什么来解决这一问题。有什么建议我应该子类化以使其按预期工作吗李>
任何其他想法都将不胜感激。谢谢
编辑(1/26/15 11:40am CST):根据,我曾尝试将其作为@规则实施,但目前它仍然不起作用。这似乎是一条有希望的道路,但目前还不起作用
编辑2(1/26/15 12:15pm CST):确定
ad 2)自定义运行程序可能会以不同的方式处理假定语句。要解决这个问题,您应该编写自己版本的Android runner,并实现一种像本地JUnit runner那样处理假设的方法,或者为Android test runner制造一个bug
广告1)我建议:尝试使用JUnit规则:
好的,终于让它与@Rules
per一起工作了,尽管自从MethodRule
被弃用以来有了很大的变化。下面是它的最终结果-我将在完善它的过程中尽量保持更新
一些重要注意事项:
您必须在测试类中实例化您的@规则
,否则您将永远不会真正执行任何检查李>
从现在开始,这将而不是在Android上将测试标记为忽略,它只会通过测试,而不会实际测试任何东西李>
在JUnit4.12中,它不能处理拆卸
如果您有撕裂,您必须添加一个带有条件的If语句,而不是assumeTrue。我想Junit的所有者说它不应该与@After一起工作
@After
override fun tearDown() {
if (junit == worksAgain()) {
能否提供BaseAndroidTest
的代码?如果它间接地扩展了junit.framework.TestCase,那么这可能是您的问题。JUnit4风格的测试不应该扩展TestCase
。此外,JUnit4中的测试级设置通常在一个公共方法中进行,该方法在
之前用@注释,它不扩展任何内容。是的,我发现了这个错误,但修复它仍然没有任何作用(我在android测试工具包页面上发现了一个问题:@Bill我看到你的错误报告在espresso 2.1中被标记为已修复,你能确认吗?我对espresso 2.1也有同样的问题-请看我在google的回复下面的评论。Oof。我将在本周晚些时候更新一些测试到2.1,所以我会看一看。之前只考虑过。)ore正在尝试更新:你验证过你有更新的运行程序吗?唉,编写我自己版本的Android测试运行程序可能超出了我的技能/时间范围。我看了一下JUnit规则的内容,它主要依赖于MethodRule
,这是不推荐的。我尝试了这两种方法并扩展了TestRule(我所做的就是在这里)-在这两种情况下,在调试模式下,我在ConditionalIgnoreRule类中设置的断点从未命中。JUnit undeprecatedMethodRule
。您可以对JUnit>=4.7的任何版本使用它,而不必担心任何问题。@pass it指定的程序员是指跳过测试用例还是将其标记为pass?@marcelo:将其标记为pass。