- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我最近开始使用 JMockit,并且对 TDD 和模拟非常陌生。我喜欢使用代码覆盖率来确保我已经测试了给定类/方法的所有行。
我在尝试 JMockit(Delegate() 功能)和代码覆盖率时遇到了以下错误。我包括通过和失败的测试。
我不确定我是否做错了什么?
我想知道是否还有其他人遇到过此问题,是否有任何解决方法或修复可用?
我什至不确定这是 JMockit 问题还是 EclEmma 问题。谢谢。
我的设置:
失败跟踪:
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/
我正在使用 eclEmma 插件来测试我的 gwt 应用程序的代码覆盖率。我为客户端代码编写了 jUnit 测试类,例如测试 get/set 方法等,以及 rpc 服务的 jUnit 测试。我使用“s
我在氧气版本上安装了 eclemma:Oxygen.3a 版本 (4.7.3a)Build id:20180405-1200 并且正在运行,但它似乎从菜单中消失了。 正在尝试更新,收到以下消息。删除并
我正在使用junit/eclemma;它工作得很好,除了我想指示 eclemma 忽略某些方法或类。例如,我将如何指示 eclemma 忽略 getter/setter。 提前致谢! 最佳答案 您可以
我正在使用 Eclipse-STS + EclEmma 插件来查看代码的覆盖范围。在我的所有抽象 util 类(仅包含静态方法)中,我在类定义行看到 3 个丢失的指令(指令计数器 报告): 红线左侧没
我正在尝试将 EclEmma 与 Eclipse 一起使用,但我无法让它工作。我看不到应该在覆盖模式下启动我的项目的按钮,在运行菜单中也没有这样的选项: 我已经尝试用我在 Internet 上找到的两
我没有达到 100% 的代码覆盖率,但我愿意。除非我看到 100% 的绿色,否则我想知道我忘了测试什么,去寻找只是基于工具而不是我的测试来找出愚蠢的东西让我远离它。然后我忘记了,不得不冲洗/重复。 虽
我有一个以以下开头的类: public class GeneralID implements WritableComparable{ ... } 还有一个是: public class LineVal
我遇到了在 Eclipse 中使用 EclEmma 插件的问题。 当我使用注释时,它不显示代码覆盖率 @RunWith路过(PowerMockRunner.class)作为论据。如果使用 (Mocki
所以我在 Eclipse 中使用 EclEmma 来生成 XML 覆盖率报告。看起来像这样: - - - - - -" line="3" desc="()V"> -
我有configured EclEmma not to instrument my unit tests效果很好。然而,编辑器仍然将测试代码突出显示为未覆盖。我不希望在单元测试中突出显示,因为它们没有
测试我的代码时我遇到了无法解释的事情。使用 eclemma 检查代码覆盖率我找到了 for-loop 的标题以黄色突出显示,消息内容为 "1 of 2 branches missing" . 代码行如
在覆盖结果中,它显示我已经覆盖了 9 条指令,而只有 5 行以绿色突出显示。其他 4 条指令是哪些? 最佳答案 单击 Coverage 框右上角的下拉箭头。它会给你一个 couple differen
我有 configured EclEmma not to instrument my unit tests效果很好。但是,编辑器仍然会突出显示未覆盖的测试代码。我不想在单元测试中突出显示,因为它们没有
我们在 JUnit 中使用 EasyMock 和 PowerMock。使用的覆盖工具是 ECLEmma。使用 EasyMock,它以绿色(如已覆盖)正确显示覆盖范围。但是,对于使用 PowerMock
我是第一次使用 EclEmma,我注意到我的主类的标题从未被覆盖。 main 方法中的所有内容都是绿色的,但 header 本身“public class Main”始终是红色的。 为了找到问题的根源
我有 Eclipse for Java Developer 4.3 和 m2e,eclemma,infinitest。我的项目使用带有 junit 4.11 的 Eclipse m2e。 我的目的是在
我认为eclemma是粗略估计我的测试覆盖率的好工具,但在报告中,它还会显示测试本身的覆盖率,这很烦人。有什么简单的方法可以禁用它(从而只显示程序代码覆盖率)吗? 最佳答案 假设您将测试用例保存在单独
我正在使用 Eclipse Mars 4.5.2。为我的应用程序运行覆盖测试时,到目前为止,它有 317 个测试方法,当它即将完成时(运行大约 274 个方法),我遇到错误,我找不到解决方案。 首先是
我正在尝试改进代码的行覆盖率。在我调用一个方法的地方执行了一行,该方法又会抛出异常。但是行覆盖显示红色,表示该行未执行。 代码: 1 public void myMethod(SomeService
代码覆盖率工具ECLEmma有一个奇怪的问题: 对于类(class)MyFirstLogger我写了测试类MyFirstLoggerTest : 请注意我在 MyFirstLoggerTest 中写道
我是一名优秀的程序员,十分优秀!