2012-04-26 16 views
76

Tôi biết cách thử các phương thức tĩnh từ một lớp bằng PowerMock.
Nhưng tôi muốn thử các phương thức tĩnh từ nhiều lớp trong một lớp thử nghiệm bằng cách sử dụng JUnit và PowerMock.Giả lập các phương thức tĩnh từ nhiều lớp bằng PowerMock

Bất cứ ai có thể cho tôi biết là có thể thực hiện việc này và cách thực hiện?

+1

Bạn chỉ cần làm điều đó giống như cách bạn thử phương pháp từ các lớp đơn lẻ. Bạn bị mắc kẹt ở đâu? – artbristol

+0

Khi sử dụng powermock, bạn cần thêm chú thích này vào lớp thử nghiệm @PrepareForTest (ClassThatContainsStaticMethod.class). Nhưng chúng tôi không thể chỉ định nhiều chú thích. Vậy làm thế nào để làm điều đó? – Newbie

Trả lời

182

Chỉ cần làm @PrepareForTest({Class1.class,Class2.class}) cho nhiều lớp học.

+7

dấu ngoặc nhọn! đó là những gì tôi đã mất tích. – sudocoder

+2

Cũng đừng quên chuyển sang PowerMockRunner bằng '@RunWith (PowerMockRunner.class)' ở cấp lớp –

+0

@NikitaBarishok không phải lúc nào cũng cần. Bạn có thể xác định quy tắc thay vì thực hiện công việc trên -' @ Quy tắc quy tắc PowerMockRule công khai = new PowerMockRule(); ' –

8
@Test 
@PrepareForTest({Class1.class, Class2.class}) 
public final void handleScript() throws Exception { 
    PowerMockito.mockStatic(Class1.class); 
    PowerMockito.mockStatic(Class2.class); 

vv ...

+0

Đối với 'PowerMock 1.6.5', có sự cố khi sử dụng' @ PrepareForTest' ở cấp phương thức (chỉ hoạt động ở cấp lớp cho tôi) –

2

Trong java với powermock/junit, sử dụng @PrepareForTest({}) với càng nhiều lớp tĩnh như bạn muốn như mảng ({}).

@RunWith(PowerMockRunner.class) 
@PrepareForTest({XmlConverterA.class, XmlConverterB.class}) 
class TransfersServiceExceptionSpec { 

} 

Tôi đã sử dụng powermock với trong scala/junit, như scalatest không có tích hợp với powermock.

@RunWith(classOf[PowerMockRunner]) 
@PrepareForTest(Array(classOf[XmlConverterA], classOf[XmlConverterB])) 
class TransfersServiceExceptionSpec { 

    @Test 
    def test() { 
    } 
}