Получение ошибки при использовании eclemma (Eclipse plugin) с JMockit (только с делегатом())


Я недавно начал использовать JMockit и очень новичок в TDD и mocking. Мне нравится использовать покрытие кода, чтобы убедиться, что я проверил все строки для данного класса / метода.

Я столкнулся со следующей ошибкой при попытке использования функций Jmockit (Delegate ()) и code-coverage. Я включаю в себя как сдачу, так и провал теста.

Я не уверен, что делаю что-то не так?

Я хотел бы знать, сталкивался ли кто-нибудь еще с этой проблемой и есть ли такие обходной путь или исправления доступны?

Я даже не уверен, является ли это проблемой JMockit или проблемой EclEmma. Спасибо.

Мои настройки:

  • ОС: Windows XP
  • JDK-JRE: 1.7.0
  • JUnit: 4.11
  • JMockit: 1.3
  • EclEmma: 2.2.1.201306092145
  • затмение: 3,6

След Отказа:

Java.яз..IllegalArgumentException: совместимый метод не найден: метод gettype(Ява.яз..Целое число) на ком.ПС.jmockit.образцы.DelegateCoverageTest$Собакой.getAnimalType(DelegateCoverageTest.Ява:99) около ком.ПС.jmockit.образцы.DelegateCoverageTest.coverageFails(DelegateCoverageTest.Ява:71) в Sun.отражать.NativeMethodAccessorImpl.invoke0 (Native Method) at Ява.яз..отражать.Метод.метод Invoke.java: 601) на солнце.отражать.NativeMethodAccessorImpl.invoke0 (Native Method) at Ява.яз..отражать.Метод.метод Invoke.java: 601) на орг..затмение.JDT, предназначенным.внутренний.junit4.бегун.JUnit4TestReference.run (JUnit4TestReference.Ява: 49) около орг..затмение.JDT, предназначенным.внутренний.тесты JUnit.бегун.Тестексекция.бег (TestExecution.java: 38) около орг..затмение.JDT, предназначенным.внутренний.тесты JUnit.бегун.RemoteTestRunner.runTests (RemoteTestRunner.java: 467) около орг..затмение.JDT, предназначенным.внутренний.тесты JUnit.бегун.RemoteTestRunner.runTests (RemoteTestRunner.java: 683) около орг..затмение.JDT, предназначенным.внутренний.тесты JUnit.бегун.RemoteTestRunner.run (RemoteTestRunner.java:390) около орг..затмение.JDT, предназначенным.внутренний.тесты JUnit.бегун.RemoteTestRunner.main (RemoteTestRunner.java: 197)


Код: (coverageFails() покажет ошибку выше при использовании с 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);
        }
    }

}
1 5

1 ответ:

Похоже на ошибку : я вижу соответствующие ссылки здесь: https://github.com/jacoco/eclemma/issues/9 и здесь: https://github.com/jacoco/jacoco/issues/35