当前位置: 首页 > 知识库问答 >
问题:

将EclEmma(eclipse插件)与JMockit(仅与Delegate()一起使用)一起使用时出错

富凯风
2023-03-14

我最近开始使用JMockit,对TDD和mocking非常陌生。我喜欢使用代码覆盖率来确保我已经测试了给定类/方法的所有行。

我在尝试JMockit(Delegate()功能)和代码覆盖率时遇到了以下错误。我包括通过和不通过的考试。

我不确定我是否做错了什么?

我想知道是否有其他人遇到过此问题,是否有任何解决方案或修复可用?

我甚至不确定这是JMockit问题还是EclEmma问题。谢谢

我的设置:

  • 操作系统:Windows XP

故障跟踪:

JAVAlang.IllegalArgumentException:未找到兼容的方法:com上的getType(java.lang.Integer)。ps.jmockit。样品。授权保险金额为$Dog。com上的getAnimalType(DelegateCoverageTest.java:99)。ps.jmockit。样品。授权保险测试。Coverage在sun上失败(DelegateCoverageTest.java:71)。反映NativeMethodAccessorImpl。在java上调用0(本机方法)。朗。反思。方法在sun上调用(Method.java:601)。反映NativeMethodAccessorImpl。在java上调用0(本机方法)。朗。反思。方法在org调用(Method.java:601)。日食jdt。内部的junit4。跑步者JUnit4TestReference。在org上运行(JUnit4TestReference.java:49)。日食jdt。内部的朱尼特。跑步者测试执行。在org上运行(TestExecution.java:38)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。在org上运行测试(RemoteTestRunner.java:467)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。在org上运行测试(RemoteTestRunner.java:683)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。在org上运行(RemoteTestRunner.java:390)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。main(RemoteTestRunner.java:197)

代码:(coverageFails()与EclEmma一起使用时会显示上面的错误)

package com.ps.jmockit.samples;

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;

import mockit.Delegate;
import mockit.Expectations;
import mockit.Mocked;

import org.junit.Test;

/**
 *  As of 7/25/2013, if I try to run the EclEmma coverage tool, it fails for {@link #coverageFails()}
 */
public class DelegateCoverageTest
{

    @Mocked
    Animal  fakeAnimal;

    @Test
    public void coverageWorks()
    {
        final String fake = "Fake";

        new Expectations()
        {
            {
                DelegateCoverageTest.this.fakeAnimal.getType(1);
                result = fake;
            }
        };

        //Arrange
        final Dog dog = new Dog();

        // Act
        final String animalType = dog.getAnimalType(this.fakeAnimal);

        // Assert
        assertThat(animalType, is(fake));
    }

    @Test
    public void coverageFails()
    {
        final String one = "One";
        final String two = "Two";

        new Expectations()
        {
            {
                DelegateCoverageTest.this.fakeAnimal.getType(anyInt);
                result = new Delegate()
                {
                    @SuppressWarnings("unused")
                    String aDelegateMethod( final int input )
                    {
                        return input == 1
                                ? one
                                : two;
                    }
                };
            }
        };

        //Arrange
        final Dog dog = new Dog();

        // Act
        final String animalType = dog.getAnimalType(this.fakeAnimal);

        // Assert
        assertThat(animalType, is(one));
    }


    //----------------- SUPPORTING CLASSES -----------------//

    interface Animal
    {
        String getType(int input);
    }

    class Mammal implements Animal
    {
        @Override
        public String getType(final int input)
        {
            return "Mammal";
        }
    }

    class Dog
    {

        public String getAnimalType(final Animal animal)
        {
            return animal.getType(1);
        }
    }

}

共有1个答案

邵刚洁
2023-03-14

似乎是一个错误:我在这里看到相关链接:https://github.com/jacoco/eclemma/issues/9和这里:https://github.com/jacoco/jacoco/issues/35

 类似资料:
  • 我有一个烧瓶服务器运行在http://127.0.0.1:5000和一个vuejs前端运行http://localhost:8080我已经做了api,并用postman测试了它,一切都如预期的那样工作:( > 将请求发布到/登录- (将请求发送至/登录)- 烧瓶API代码: 登录。vue: 指数vue 当我使用邮递员登录时,我得到的响应为;当我使用邮递员获取url/索引时,我得到响应。数据但当我使

  • 问题内容: 因此,我一直在为这个(应该是)简单的练习而绞尽脑汁,以使该程序将日期字符串转换为对象,对其进行格式化,并在完成后将其作为字符串再次返回。 这是程序的最后一点,它从文件中获取一小段文本,将其分解为单独的记录,然后将记录分解为单独的数据并将它们分配给个人对象。 我已经在多个位置检查了该代码,并且该代码完全执行了应该执行的操作,直到调用了format函数(该函数抛出)为止。为对象分配了应该分

  • 问题内容: 我想在目录中获取具有特定扩展名的文件列表。在中,我看到了可以做到这一点的方法。 由于我需要特定的扩展名,因此我创建了一个。但是,当我与此一起使用时,出现编译错误。我以为自以来,我应该能够做到这一点。代码如下: 最后一行显示编译错误: 类型的方法不适用于类型的参数 我正在尝试使用,不是。为何编译器无法识别这一点? 如果我编写自己的扩展筛选器,则此方法有效。我宁愿使用而不愿自己写。我究竟做

  • 问题内容: 我正在尝试在我的watchKit应用中使用firebase数据库。我已经在我的iPhone应用程序上开发了此功能,但是发现在我的Watch应用程序上很难做到这一点。当我尝试将firebase导入watch应用程序的VC类中时,它正在创建error 。 可以在Watch app中使用Firebase吗? 问题答案: 可悲的是,没有支持,并由于这样的事实,有没有支持在这些版本中,并高度依赖

  • 问题内容: 当请求来自Ajax.ActionLink(使用Http方法发布)时,是否可以在控制器操作上使用ValidateAntiForgeryToken属性。替代方法似乎是手动滚动JQuery Ajax请求,但我很好奇MVC Ajax框架中是否有办法。 问题答案: 我还没看过。您必须将令牌放入POST中记录的数据中。每次都使用相同的防伪令牌ID(或名称,我不记得了),但是您必须非常小心,并确保您

  • 问题内容: 最近,我开始与路由器一起使用来构建应用程序。 我通常将use 用于依赖项和代码管理。但是,当我尝试包含包含语法的文件时会出现问题。 这就是我目前所拥有的: 如何将IndexComponent放在其自己的文件中并在此文件中调用它?我尝试了通常的方法(与骨干和反应相同),但是由于语法错误。 问题答案: 所以我自己弄清楚了。 我从此仓库获得了必要的文件和说明:jsx- requirejs-p