【问题标题】:can powermock be used to test static methodspowermock可以用来测试静态方法吗
【发布时间】:2018-12-14 00:59:13
【问题描述】:

我有以下两个类:

public class Prod
{   
    public  void logon(){        
        System.out.println("'\u000CProd  logon");        
        addUser();        
    }
        public  void addUser(){     
        System.out.println("Prod  addUser");
    }
}

public class Dev extends Prod
{
    public void addUser(){     
       System.out.println("Dev  addUser");
    }    
    public static void main(String[] args){         
       Dev test = new Dev(); 
       test.logon(); 
    }   
}

有没有办法让所有方法都是静态的,然后测试 Dev.addUser() 是否正常工作?

这是我想做的事情:

public class Prod
{   
    public static void logon(){        
        System.out.println("'\u000CProd  logon");        
        addUser();        
    }
        public static void addUser(){     
        System.out.println("Prod  addUser");
    }
}

public class Dev extends Prod
{
    public static void addUser(){     
       System.out.println("Dev  addUser");
    }    
    public static void main(String[] args){  
       logon(); 
    }   
}

当我在 Dev 中运行 main() 时,我们应该得到:

产品登录

开发者添加用户

【问题讨论】:

  • 使用“所有方法静态”发布代码。您要测试的方法是什么?你想模拟什么课程? (我假设你想模拟一些东西,因为你提到了 powermock)
  • 问题不清楚,你想要什么?
  • test.logon() 将在第二种情况下抛出 NullPointerExcpetion .... 你能解释一下你的问题吗.. 对于静态方法,你称之为 Prod.logon()
  • @ketan,我同意您的评论不清楚。你不明白什么?
  • 在第二个例子中它应该只是说 login()

标签: java static powermock


【解决方案1】:

有没有办法让所有方法都是静态的,然后测试 Dev.addUser() 是否正常工作?

不,没有。

这确实是 Java 的基础:您想在多态上下文中使用静态方法。但是静态方法不是多态的。没有真正的继承,没有没有覆盖编写静态方法。请参阅here 详细解释为什么会这样。重复:无法以纯粹的静态方式实现所需的输出,围绕 A 类扩展 B 类构建。故事结束。

正如已经说过的:从概念上讲,这也是错误的。由于这些限制,static 只能在 Java 中谨慎使用。只需使用您现在拥有的非静态代码即可。

很遗憾,您的问题并不清楚您究竟打算测试什么,因此我无法帮助您解决这部分问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2012-04-28
    相关资源
    最近更新 更多