2017-06-16 163 views
2

這是我的代碼,我想考覆蓋不起作用

@AdminAccessOnly 
@Repository 
public class TenResImpl extends TenAbstractResImpl implements TenIdRes { 

private Invocation request; 

protected void messageSend(String iD) { 

     Client client = utils.createClient(); 
     WebTarget webTarget = client.target(location).path("/testurl/" + tenantId); 
     Invocation.Builder requestBuilder = webTarget.request(); 
     Response response = null; 
      response = sendRequest(); //here I call the method!!!!!!! 

      if (response.getStatusInfo().getFamily() != Status.Family.SUCCESSFUL) { 
       // do something 
      } else { 
       //do something 
      } 
     } 



protected Response sendRequest() { 
    return request.invoke(); // here is the method which should be over written !!!! 
} 
} 

這是我在我的測試類的另一種方法:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = TestBoot.class) 
@EnableAutoConfiguration(exclude = Application.class) 
public class TenResImplTest extends TenResImpl{ 


@Autowired 
private TenResImpl tenResImpl; 

@Test 
public void testMessageSend() throws Exception {  

    this.tenResImpl.messageSend("132"); 

} 



@Override 
protected Response sendRequest() { 

    StatusType statusType = Mockito.mock(StatusType.class); 
    when(statusType.getFamily()).thenReturn(Status.Family.SUCCESSFUL); 
    Response response = Mockito.mock(Response.class); 
    return response; 
} 

} 

,但每次我通過它調試我看到他跳進了類TenResImpl中的方法SendRequest(),而不是去測試類....我做錯了什麼?訪問可見性在兩者上都受到保護,並且都在同一個包中

+0

你能說明你在哪裏打電話嗎? – Mureinik

+0

是的,我在 – Nali

+0

以上添加了一些評論你能向我們展示你的班級實例嗎? –

回答

2

它跳轉到方法TenResImpl,因爲這就是您稱之爲的地方。重寫一個方法並不意味着被覆蓋的方法將永遠不會再被調用。

爲了簡化您所寫的內容,我們假設2個類別AB,其中B延伸了AA有一個test()方法。如果在B中覆蓋test(),則在B對象上調用test()對象將執行B類的test(),但在A對象上調用它仍將執行A類的方法。

現在讓我們適應這個以您的情況:

TenResImplA和您的測試類是B。你打電話sendRequest()TenResImpl所以,因此,我已經解釋過,它會進入你的TenResImpl的方法。

+0

那裏有沒有辦法我可以測試它沒有直接從我的測試類調用sendRequest()? – Nali

+0

不幸的是沒有。希望我的回答有幫助! – Kaiserbogey