java – Mockito Spy – stub在调用构造函数之前
我试图监视一个对象,我想在构造函数调用它之前,将构造函数调用一个方法.
我的班级看起来像: public class MyClass { public MyClass() { setup(); } public void setup() { } } 不能调用安装方法.那么,我如何侦测这个方法(和存根设置,使它什么都不做)? 为什么需要stub安装方法使其不起作用的原因: 解决方法
要直接回答您的问题,您不能使用Mockito来存储从构造函数调用的方法.在开始嘲笑之前,Mockito需要一个类的实例,而您没有给自己创建一个测试实例的方法.
更一般地说,如Effective Java项17,you should not call overridable methods from constructors中所述.如果这样做,例如,您可以在引用最终字段的子类中提供一个覆盖,但在最后一个字段设置之前运行.这可能不会让你在这里遇到麻烦,但它在Java中是一个坏习惯. 幸运的是,您可以轻松地重组代码: public class MyClass { public MyClass() { this(true); } /** For testing. */ MyClass(boolean runSetup) { if (runSetup) { setup(); } } /* ... */ } 为了使其更加明显,您可以使单参数MyClass构造函数为private,并提供一个公共静态工厂方法: /* ... */ public static MyClass createForTesting() { return new MyClass(false); } private MyClass(boolean runSetup) { /* ... */ 虽然一些开发人员认为在主要用于测试的方法中编写任何代码是一个不好的做法,但请记住,您负责代码的设计,测试是绝对知道您将需要适应的少数消费者之一.尽管在“生产”代码中避免显式测试设置仍然是一个好主意,但是为了测试,创建额外的方法或重载通常会使您的代码整体更清晰,并可以大大提高测试覆盖率和可读性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |