Tôi cũng mới sử dụng Mockito và PowerMockito. Tôi phát hiện ra rằng tôi không thể kiểm tra các phương pháp tĩnh với Mockito thuần túy vì vậy tôi cần phải sử dụng PowerMockito (phải không?).Vì lý do gì tôi nên thử?
tôi có lớp học rất đơn giản gọi là Validate với phương pháp này rất dễ dàng
public class Validate {
public final static void stateNotNull(
final Object object,
final String message) {
if (message == null) {
throw new IllegalArgumentException("Exception message is a null object!");
}
if (object == null) {
throw new IllegalStateException(message);
}
}
Vì vậy, tôi cần phải xác minh rằng:
1) Khi tôi gọi đó là phương pháp tĩnh trên lập luận nhắn null, IllegalArgumentException được gọi là
2) Khi tôi gọi đó là phương pháp tĩnh trên lập luận đối tượng null, IllegalStateException được gọi
Từ những gì tôi có cho đến nay, tôi đã viết bài kiểm tra này:
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.isNull;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.testng.annotations.Test;
@RunWith(PowerMockRunner.class)
@PrepareForTest(Validate.class)
public class ValidateTestCase {
@Test(expectedExceptions = { IllegalStateException.class })
public void stateNotNullTest() throws Exception {
PowerMockito.mockStatic(Validate.class);
Validate mock = PowerMockito.mock(Validate.class);
PowerMockito.doThrow(new IllegalStateException())
.when(mock)
.stateNotNull(isNull(), anyString());
Validate.stateNotNull(null, null);
}
}
Vì vậy, đây nói rằng tôi chế nhạo lớp Validate và tôi đang kiểm tra rằng khi mô hình được gọi là phương pháp mà với lập luận null như một đối tượng và bất kỳ chuỗi dưới dạng tin nhắn, một IllegalStateException được ném.
Bây giờ, tôi thực sự không hiểu. Tại sao tôi không thể gọi trực tiếp phương pháp đó, thả toàn bộ ma thuật voodoo xung quanh chế nhạo lớp tĩnh đó? Dường như với tôi rằng trừ khi tôi gọi Validate.stateNotNull rằng kiểm tra đi anyway ... Vì lý do gì tôi nên thử nó?