2014-10-04 18 views
45

Tôi có một dự án Java dựa trên Gradle là bây giờ tôi muốn thử một phương thức riêng bằng PowerMock. Vấn đề là tôi không thể sử dụng PowerMockRunner vì tôi luôn nhận được ngoại lệ sau khi thêm chú thích @RunWith(org.powermock.modules.junit4.PowerMockRunner.class).Không thể chạy thử nghiệm JUnit với PowerMockRunner

Lỗi:

org.powermock.reflect.exceptions.FieldNotFoundException: Field 'fTestClass' was not found in class org.junit.internal.runners.MethodValidator. 
at org.powermock.reflect.internal.WhiteboxImpl.getInternalState(WhiteboxImpl.java:581) 
at org.powermock.reflect.Whitebox.getInternalState(Whitebox.java:308) 
at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate TestMethods(PowerMockJUnit4MethodValidator.java:79) 
at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate InstanceMethods(PowerMockJUnit4MethodValidator.java:49) 
at org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:51) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.validate(PowerMockJUnit44RunnerDelegateImpl.java:108) 
... 

này là phụ thuộc thử nghiệm của tôi:

testCompile 'junit:junit:4.+', 
      'org.powermock:powermock-core:1.5.6', 
      'org.powermock:powermock-module-junit4:1.5.6', 
      'org.powermock:powermock-api-mockito:1.5.6' 

Các thử nghiệm bản thân cũng không thành công khi hoàn toàn trống rỗng (lỗi khởi tạo):

@RunWith(PowerMockRunner.class) 
public class SomeTest { 
    @Test 
    public void testSomething() { 
    } 
} 

Bất kỳ ý tưởng những gì có thể sai? Các thử nghiệm khác sử dụng PowerMock đang hoạt động tốt (không ai trong số chúng sử dụng PowerMockRunner).

Chúc mừng và cảm ơn sự giúp đỡ của bạn! Ben

Trả lời

66

Đây là lỗi xảy ra khi bạn sử dụng JUnit 4.12 và PowerMock < 1.6.1. Vấn đề được giải quyết trong PowerMock 1.6.1. Vui lòng cập nhật phụ thuộc của bạn cho phù hợp

testCompile 'junit:junit:4.12', 
      'org.powermock:powermock-core:1.6.1', 
      'org.powermock:powermock-module-junit4:1.6.1', 
      'org.powermock:powermock-api-mockito:1.6.1' 

Nếu bạn không thể nâng cấp PowerMock thì bạn có thể sử dụng JUnit 4.11.

testCompile 'junit:junit:4.11', 
      'org.powermock:powermock-core:1.5.6', 
      'org.powermock:powermock-module-junit4:1.5.6', 
      'org.powermock:powermock-api-mockito:1.5.6' 

Bạn có thể thêm các dòng ngăn xếp khác, khám phá thêm chi tiết về sự cố không.

+0

Cảm ơn bạn !!! Có phải hành vi bình thường mà Gradle cũng kéo bản phát hành beta không? – Ben

+2

Dường như không được sửa trong 4.12 hoặc là ... – Mag

+2

Điều này được khắc phục bằng PowerMock 1.6.1. – JeeBee

0

Kiểm tra những gì Stefan nói, và ở trên mà bạn cũng cần phải thêm

@PrepareForTest({<The class/es you are Mocking>, ...}) 

mà không có sự chuẩn bị cho kiểm tra, PowerMockRunner sẽ không biết được lớp được chế giễu.

1

Hiện đã có một lỗi đăng nhập chống PowerMock: https://code.google.com/p/powermock/issues/detail?id=531

Dường như JUnit thay đổi một số tên trường nội bộ của mình mà PowerMock được truy cập thông qua phản ánh, do đó phá vỡ khả năng cho PowerMock để tiêm đúng cách riêng của mình.

Các vấn đề liên quan