Giả lập các phương thức tĩnh từ nhiều lớp bằng PowerMock


103

Tôi biết cách mô phỏng các phương thức tĩnh từ một lớp bằng PowerMock.
Nhưng tôi muốn mô phỏng 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.

Bất cứ ai có thể cho tôi biết là nó có thể làm điều này và làm thế nào để làm điều đó?


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

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 phải làm như thế nào?
Newbie

Câu trả lời:


256

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


11
dấu ngoặc nhọn! đó là những gì tôi đã thiếu.
sudocoder

2
Cũng đừng quên để chuyển sang PowerMockRunner với @RunWith(PowerMockRunner.class)vào mức độ lớp
Nikita Barishok

1
@NikitaBarishok không phải lúc nào cũng cần thiết. Bạn có thể xác định quy tắc thay vì làm công việc trên -@Rule public PowerMockRule rule = new PowerMockRule();
Aniket Thakur

5
in kotlin@PrepareForTest(Class1::class, Class2::class))
Ryan

Nó cũng tốt hơn để sử dụng @PrepareOnlyThisForTestthay vì @PrepareForTest. Cái sau cũng sửa đổi các lớp cha, điều này thường không cần thiết.
www.Decompiler.com

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

Vân vân...


Đối với PowerMock 1.6.5có những vấn đề sử dụng @PrepareForTesttrên mức phương pháp (chỉ hoạt động trên mức lớp cho tôi)
Nikita Barishok

2

Trong java với powermock / junit, sử dụng @PrepareForTest({})với bao nhiêu lớp tĩnh tùy thích như array ( {}).

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

}

Tôi đã sử dụng powermock với trong scala / junit, vì 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() {
  }
}

1

Nếu bạn đang sử dụng kotlin, thì cú pháp là

@PrepareForTest(ClassA::class, ClassB::class)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.