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