Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AndroidJUnit4.class+;org.junit.aspect.assumedtrue=AssumptionViolatedException_Java_Android_Junit_Junit4_Android Testing - Fatal编程技术网

Java AndroidJUnit4.class+;org.junit.aspect.assumedtrue=AssumptionViolatedException

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)注释

我已经设法让我的Android项目过渡到JUnit4,当然我想做的主要原因是它不起作用。如果这里有人有想法,我会很乐意帮忙的

我试图解决的问题是,如果构建没有指向临时服务器,我想自动跳过某些测试。我已经用一个
构建类型设置了它,它使用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 undeprecated
    MethodRule
    。您可以对JUnit>=4.7的任何版本使用它,而不必担心任何问题。@pass it指定的程序员是指跳过测试用例还是将其标记为pass?@marcelo:将其标记为pass。