Мы пытаемся использовать 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)
Так есть ли способ использовать аннотации, кроме расширения класса? Расширение класса будет слишком ограничительным для нас, потому что нам нужно будет игнорировать разные пакеты для одного и того же тестового класса.
Мы ищем способ добиться этого с помощью композиции, а не наследования.
Любой другой Рекомендация по применению нескольких аннотаций по составу также поможет
Заранее спасибо