2016-05-20 10 views
0

Я хотел бы сейчас, если можно издеваться класс какMock класс без PowerMock в arquillian Test

public class MyClass{ 
    ... 
} 

Наша бизнес-логика создания этого объекта с new myClass() где-то в коде, и поэтому я не имеют доступ к созданному объекту, чтобы имитировать эти методы. Есть ли способ заменить весь класс или перезаписать эти методы. Я использую Mockito и я нашел только примеры, чтобы сделать это как

@Test 
public void myTest{ 
    MyClass myClass = Mockito.mock(MyClass.class); 
    Mockito.when(myClass.myMethod()).thenReturn("hello World"); 
    ... 
} 

Мы не можем использовать PowerMock, потому что это не совместимо с нашей тестовой средой.

Любые предложения приветствуются.

+0

Приведенный выше код высмеял класс MyClass. Вы хотите проверить методы внутри MyClass или то, что вы пытаетесь тестировать? –

+0

@MinhKieu Я хочу высмеять класс, а не только экземпляр, потому что 'new MyClass()' не вызывается внутри тестовой функции –

ответ

0

К сожалению, я вижу только два хардкорных решения:

Сделать Powermock, работающих с использованием PowerMockRule и агента PowerMock Правило: Getting javassist not found with PowerMock and PowerRule in Junit with Mockito

или

Использование Java Reflection, чтобы установить высмеивал объект MyClass: Is it possible in Java to access private fields via reflection

0

Я нашел приемлемый способ для выполнения моих требований.

Я преобразовал MyClass в bean-компонент, просто добавьте аннотацию @Dependent.

@Dependent 
public class MyClass{ 
    public Integer someMethod(){ 
     return 100; 
    } 
} 

Я использую MyClass в бизнес-логике, как этот

public class BusinessClass{ 
    @Inject 
    MyClass myClass 

    public Integer doSomething(){ 
     return myClass.someMethod(); 
    } 
} 

После этого изменения я могу издеваться класс в моем тесте с аннотацией @Specializes

@Specializes 
@Dependent 
public class MyClassMock extends MyClass 
{ 
    @Override 
    public Integer someMethod(){ 
     return 23; // return my mocked value 
    } 
} 

MyClass будет автоматически заменен на MyClassMock в тестовой среде.

Смежные вопросы