您能帮我为该代码定义PowerMock吗?

    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()的方式,但是调用此方法时我无法返回任何内容,因此我完全无法模拟这几行。

感谢您的帮助

最佳答案

我的建议:忘记使用PowerMock。

如果必须模拟静态方法,则可以围绕它构建自己的小包装器类。然后,为了进行测试,包装器可以返回您控制的内容;以及用于生产用途;您的包装器仅调用static方法。

PowerMock看起来可以解决许多问题。但要早于晚,这将是造成更多问题的原因。

认真地说:如果您的设计只能通过PowerMock进行测试,则通常很明显地表明您的设计很糟糕。因此:专注于重新测试您的代码;而不是将时间花在诸如PowerMock之类的弊大于利的工具上。

我花了无数小时试图解决PowerMock问题。从开始编写“更好的测试”生产代码开始……我已经编写了成百上千的测试,而不再需要PowerMock。

关于java - JUnit中的PowerMock,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37272445/

10-11 04:07