我在某些测试中使用Mockito。
我有以下课程:
class BaseService {
public void save() {...}
}
public Childservice extends BaseService {
public void save(){
//some code
super.save();
}
}
我只想模拟的第二个调用(super.save)ChildService
。第一次调用必须调用real方法。有没有办法做到这一点?
Mockito不支持此功能。
这可能不是你要寻找的答案,但是你看到的是不采用设计原则的症状:
偏重于继承而不是继承
如果你提取策略而不是扩展超类,那么问题就不存在了。
但是,如果不允许你更改代码,但无论如何都必须对其进行测试,并且以这种尴尬的方式仍然存在希望。使用某些AOP工具(例如AspectJ),你可以将代码编织到超类方法中,而完全避免执行(糟糕)。如果使用代理,这将不起作用,则必须使用字节码修改(加载时编织或编译时编织)。也有支持这种技巧的模拟框架,例如PowerMock和PowerMockito。
我建议你进行重构,但是如果这不是一种选择,那么你将获得一些严肃的黑客乐趣。
问题内容: 这是我的代码- 我想在课堂上嘲笑。但是我找不到解决办法。仅禁止并返回默认值(在上述情况下为0)。事情就是这样,,只对静态方法的工作。 有没有办法在Powermock中做到这一点? 我正在使用Powermock 1.5和Mockito 1.9.5。 问题答案: 看来jMockit可以满足我的需求。也许我可以将这个问题发布到powermock邮件列表中。同时下面就足够了。包learning
基类 在派生类中不应用组合和其他函数。如果是,我是否应用了错误的模式?我应该如何处理相同的?
例如,我有处理程序: 但是当我试图模拟它时,它实际上调用。如何使用来模拟它的方法?
我试图为一个类编写一个单元测试,这个类使用带有库中的的Google vision API。问题是,由于某种原因,我的模拟仍然调用真正的方法,然后抛出一个NPE,这破坏了我的测试。我以前从未在模拟上见过这种行为,我想知道我是不是做错了什么,是不是Spock/Groovy中有bug,还是与Google lib有关?
下面是我要为其创建测试的类和方法: 具体地说,我希望模拟getAnalytics.getAll(),这样它就会返回一个我已经定义的字符串。而不是方法执行它的任务。这是我的代码:
我试图在测试中模拟一个调用,但我得到了一个错误,因为它调用了真正的方法,而不是模拟它。 这是我的方法 } 这是我的测试课 测试实际上调用了受保护的方法config Setter,并在设置代理时失败。帮助我理解我在这里做错了什么。