在单元测试时,我更喜欢使用伪类而不是模拟(更易读)。这在Python中很适合我,但在Java世界中,我通常需要为I类替换创建一个接口。这意味着我现在有3个:
而不是1个班级如果我想获得一个非常好的测试覆盖率,这实际上意味着我需要为我的项目中的每个类执行此操作,这是不可接受的。我只想为那些真正在生产代码中有多个实现的类创建一个接口。
我注意到Mockito允许您在不创建界面的情况下模拟具体类。我可以为假类使用这样的技巧吗?
例如,在测试注册系统时,会有一个电子邮件类。现在在测试中,我实际上并不想发送实际的电子邮件,所以我要么嘲笑这个类,要么假冒这个类。
class FakeEmailService {
public void sendEmail(String to, String body) {
m_sent = true;
}
}
现在我的注册系统构造函数接受原始类EmailService
,但我想通过一些技巧在测试中使用FakeEmailService
:
Registration reg = new Registration(new FakeEmailService());
这在Python中很好,因为它不是静态类型的。
答案 0 :(得分:1)
'((1 4) (2 5) (3 6))
不是最终的。但它不是一个好的解决方案,因为它很容易意外地将代码执行传递到原始类(通过构造函数而不是重写方法)并且在测试中有意外行为