использование аннотаций Powermock через интерфейс или тип аннотации - PullRequest
0 голосов
/ 05 февраля 2020

Мы пытаемся использовать Powermock, и для начала нам кажется, что это очень хороший инструмент для модульного тестирования для тестирования метода stati c.

Мы не могли понять, как использовать аннотации Powermock в интерфейсе или типы аннотаций.

Когда мы используем их в абстрактном классе и расширяем наш тестовый класс, он работает

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Dummy.class })
@PowerMockIgnore({ "javax.management.*", "com.mycompany.excludepackage.*" })
public abstract class BaseTestClass {


}

Однако, определяя их в интерфейсе следующим образом и заставляя тестовый класс реализовать этот интерфейс, не работает :

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Dummy.class })
@PowerMockIgnore({ "javax.management.*", "com.mycompany.excludepackage.*" })
public interface ITestClass {


}

Реализация пользовательской аннотации следующим образом и аннотирование тестового класса этой аннотацией также не помогает:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Dummy.class })
@PowerMockIgnore({ "javax.management.*", "com.mycompany.excludepackage.*" })
public @interface TestClassAnnotation {

}

В обоих случаях мы имеем ClassNotPreparedException

[Ljava.lang.Object;@43bc63a3
The class xxx not prepared for test.

    at org.powermock.api.mockito.expectation.reporter.MockitoPowerMockReporter.classNotPrepared(MockitoPowerMockReporter.java:29)
    at org.powermock.api.mockito.internal.mockcreation.MockTypeValidatorFactory$DefaultMockTypeValidator.validate(MockTypeValidatorFactory.java:37)
    at org.powermock.api.mockito.internal.mockcreation.AbstractMockCreator.validateType(AbstractMockCreator.java:10)
    at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.createMock(DefaultMockCreator.java:49)
    at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.mock(DefaultMockCreator.java:40)
    at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:62)

Так есть ли способ использовать аннотации, кроме расширения класса? Расширение класса будет слишком ограничительным для нас, потому что нам нужно будет игнорировать разные пакеты для одного и того же тестового класса.

Мы ищем способ добиться этого с помощью композиции, а не наследования.

Любой другой Рекомендация по применению нескольких аннотаций по составу также поможет

Заранее спасибо

...