2016-05-20 63 views
0

我想現在,如果有可能嘲笑一類像沒有PowerMock模擬類的Arquillian測試

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

我發現了一個可以通過的方式來達到我的要求。

我將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在testenvironment中。