Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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 将EclEmma(eclipse插件)与JMockit(仅与Delegate()一起使用)一起使用时出错_Java_Eclipse_Jmockit_Eclemma - Fatal编程技术网

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

Java 将EclEmma(eclipse插件)与JMockit(仅与Delegate()一起使用)一起使用时出错,java,eclipse,jmockit,eclemma,Java,Eclipse,Jmockit,Eclemma,我最近开始使用JMockit,对TDD和mocking非常陌生。我喜欢使用代码覆盖率来确保我已经测试了给定类/方法的所有行 我在尝试JMockit(Delegate()功能)和代码覆盖率时遇到了以下错误。我包括通过和不通过的考试 我不确定我是否做错了什么 我想知道是否有其他人遇到过此问题,是否有任何解决方法或修复方法可用 我甚至不确定这是JMockit问题还是EclEmma问题。 谢谢 我的设置: 操作系统:Windows XP JDK-JRE:1.7.0 JUnit:4.11 JMockit

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

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

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

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

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

我的设置:

  • 操作系统:Windows XP
  • JDK-JRE:1.7.0
  • JUnit:4.11
  • JMockit:1.3
  • EclEmma:2.2.1.201306092145
  • 月食:3.6
故障跟踪:

java.lang.IllegalArgumentException:未找到兼容的方法: getType(java.lang.Integer)位于 DelegateCoverageTest$Dog.getAnimalType(DelegateCoverageTest.java:99) 在 com.ps.jmockit.samples.DelegateCoverageTest.coverageFails(DelegateCoverageTest.java:71) 位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) java.lang.reflect.Method.invoke(Method.java:601)位于 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于 java.lang.reflect.Method.invoke(Method.java:601)位于 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)


代码:(Coverage Fails()与EclEmma一起使用时将显示上述错误)


似乎是一个bug:我在这里看到了相关链接:这里:

如果你在JMockit中得到了IllegaArgumentException,为什么EclEmma会有问题?你为什么必须使用“@SuppressWarnings(“unused”)”?@pimpf0r?我在我的帖子中已经提到过“我甚至不确定这是JMockit问题还是EclEmma问题”“SuppressWarnings”只是为了避免出现Eclipse警告,因为Eclipse无法识别正在使用的代码。您是否尝试过在没有eclemma的情况下运行它?@flup Yes它在没有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);
        }
    }

}