Tôi là một fan hâm mộ lớn của Mockito, không may cho one of my projects trong đó sử dụng Java 8, nó không thành công vào tôi ...Bạn có thể làm cho mockito (1.10.17) hoạt động với các phương thức mặc định trong giao diện không?
Kịch bản:
public final class MockTest
{
@Test
public void testDefaultMethodsWithMocks()
{
final Foo foo = mock(Foo.class);
//when(foo.bar()).thenCallRealMethod();
assertThat(foo.bar()).isEqualTo(42);
}
@FunctionalInterface
private interface Foo
{
int foo();
default int bar()
{
return 42;
}
}
}
Thật không may, thử nghiệm thất bại và foo.bar()
lợi nhuận 0.
Khi tôi bỏ ghi chú dòng when()
, tôi nhận được một vết đống ...
java.lang.NoSuchMethodError: java.lang.Object.bar()I
at com.github.fge.lambdas.MockTest.testDefaultMethodsWithMocks(MockTest.java:18)
Đây là phiên bản ổn định mới nhất hiện có trên maven; googling xung quanh đã không cho tôi biết nhiều về tình trạng của mockito liên quan đến chức năng mới này trong Java 8 ...
Bạn có thể làm cho nó hoạt động theo cách khác hơn là triển khai giao diện và spy()
trên chúng (công trình này)?
tôi nghi ngờ rằng đây là kết quả của cách mà Mockito xử lý thế hệ proxy năng động cho mocks và sẽ cần một bản cập nhật cho cơ sở hạ tầng. Bạn đã kiểm tra liệu có một vấn đề nổi bật chống lại Mockito cho nó? – chrylis
@chrylis no, không phải cho điểm này nói riêng; có một vấn đề được mở ra liên quan đến Java 8 và các phương thức mặc định, và trình phát vấn đề được nói đúng (tôi ngu ngốc không nghĩ về điều này lúc đầu) rằng anh ta phải biên dịch mockito với Java 8 để làm việc thử nghiệm. Có vẻ ảm đạm:/ – fge
Vâng. Vẫn còn một vài thư viện ở đó duy trì dĩa cho 1.4. – chrylis