我最近开始使用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

  • 故障跟踪:



    代码:(与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

    10-07 12:16
    查看更多