gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:50:53 25 4
gpt4 key购买 nike

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

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

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

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

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

我的设置:

  • 操作系统:Windows XP
  • JDK-JRE:1.7.0
  • JUnit:4.11
  • JMockit:1.3
  • EclEmma:2.2.1.201306092145
  • eclipse :3.6

失败跟踪:

java.lang.IllegalArgumentException: No compatible method found: getType(java.lang.Integer) at com.ps.jmockit.samples.DelegateCoverageTest$Dog.getAnimalType(DelegateCoverageTest.java:99) at com.ps.jmockit.samples.DelegateCoverageTest.coverageFails(DelegateCoverageTest.java:71) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.lang.reflect.Method.invoke(Method.java:601) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.lang.reflect.Method.invoke(Method.java:601) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)


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

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);
}
}

}

最佳答案

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

关于java - 将 EclEmma(eclipse 插件)与 JMockit 一起使用时出错(仅与 Delegate() 一起使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com