2016-05-17 78 views
1

能否請你幫我定義該代碼PowerMock:PowerMock JUnit中

String role = "ROLE_WARP_PUBLISH_PRIVATE"; 

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 
    Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities(); 

    for (GrantedAuthority auth : authorities) 
    { 
     if(auth.getAuthority().equals(role)) 
     { 
      if (publishCheckbox == true) 
      { 
       getScenarioService().makePublic(scenarioVersionId); 
      } 
     } 

    } 

所以我知道那是我嘲笑getContext(),但我無法回報的東西時,這種方法被調用,所以我有我完全可以嘲笑那幾條路線。

感謝您的幫助

+0

通常,對於這類問題,您應該首先嚐試Google。堆棧溢出是爲了解決代碼問題,而不是(在這裏我並不意味着冒犯)缺乏知識。如果你打算作爲一個問題看看[問]。謝謝。 –

+0

@David Wilson我去谷槽,我知道它是如何工作的,但我沒有實現它,否則iI已經做到了,所以我就這麼問了。 – Herrminator

+0

可悲的是我無法親自幫助你,因爲我對java一無所知 - 我只是在回顧這個問題。 –

回答

1

我的建議:忘記有關使用PowerMock。

如果你必須模擬靜態方法,然後建立你自己的小包裝類。然後,爲了測試,你的包裝可以返回一些東西you control;並用於生產用途;你的包裝只是調用靜態方法。

PowerMock看起來像許多問題的解決方案;但早於後期,這將成爲多得多問題的原因。嚴重:如果您的設計只能使用PowerMock進行測試,這通常表明您的設計是不好。所以:專注於重做你的測試代碼;而不是投入時間在像PowerMock這樣的工具上,這種工具的好處遠不止於此。

我花了無數小時試圖解決PowerMock問題;並且由於開始寫「更好地測試」生產代碼......我已經寫了數百或數千次測試,而又不需要再次使用PowerMock。

+0

雖然我同意這個說法,但我不認爲它回答了這個問題。我認爲這將是一個真正的答案偉大的腳註。 –

+0

有趣的是,我不止一次對類似問題給出了類似的答案;更重要的是:這個人不止一次地接受了我的答案。因爲有時候人們會意識到他們正面臨一個XY問題;並且我給了他們「Y」的答案...並且這個信息比獲得「X」答案更有價值。 – GhostCat