Tôi cần kiểm tra phương thức handleIn() bằng Mockito.Mockito bỏ qua phương pháp tĩnh để thử nghiệm
Tuy nhiên, mã cần gọi mã di sản này Util.getContextPDO là phương pháp tĩnh.
Lưu ý rằng trong môi trường thử nghiệm, Util.getContextPDO này luôn trả về Ngoại lệ và tôi định bỏ qua Util.getContextPDO() này bằng cách trả về một IPDO giả.
public class MyClass {
public IPDO getIPDO()
{
return Util.getContextPDO(); // note that Util.getContextPDO() is a static, not mockable.
}
public String handleIn(Object input) throws Throwable
{
String result = "";
IPDO pdo = getIPDO();
// some important business logic.
return result;
}
}
Ban đầu tôi nghĩ điều này có thể đạt được bằng cách sử dụng gián điệp() của lớp "MyClass", vì vậy tôi có thể thử giá trị trả về của getIPDO(). Dưới đây là nỗ lực ban đầu của tôi sử dụng gián điệp()
@Test
public void testHandleIn() throws Exception
{
IPDO pdo = new PDODummy();
MyClass handler = new MyClass();
MyClass handler2 = spy(handler);
when(handler2.getIPDO()).thenReturn(pdo);
PDOUtil.setPDO(pdo, LogicalFieldEnum.P_TX_CTGY, "test123");
IPDO pdoNew = handler2.getIPDO();
Assert.assertEquals("test123,(PDOUtil.getValueAsString(pdoNew, LogicalFieldEnum.P_TX_CTGY)));
}
Tuy nhiên khi (handler2.getIPDO()) thenReturn (PDO). là ném ngoại lệ mà tôi muốn tránh (vì handler2.getIPDO()) dường như gọi phương thức thực.
Bất kỳ ý tưởng nào về cách kiểm tra phần mã này?
Chúng tôi đang sử dụng ** PowerMock ** cùng với ** Mockito ** để kết hợp với di sản. Điều này trở nên dễ dàng vì vậy chúng tôi đã thực hiện quy tắc để tránh ** PowerMock ** để chiến đấu với di sản hiệu quả hơn –
Sự cố "duy nhất" với PowerMock là bạn buộc phải sử dụng nhân tố thử nghiệm riêng của mình, không phải lúc nào cũng là một tùy chọn (khi viết Ví dụ, các cuộc kiểm tra Robolectric trên Android đòi hỏi người chạy robot riêng của họ) –