JMockit官方文档:伪造Facking-part 3 伪造没有指定实现的类

为了展示这个特性,参考下面这个例子:

public interface Service { int doSomething(); }
final class ServiceImpl implements Service { public int doSomething() { return 1; } }
 
public final class TestedUnit
{
private final Service service1 = new ServiceImpl();
private final Service service2 = new Service() { public int doSomething() { return 2; } };
 
public int businessOperation() {
return service1.doSomething() + service2.doSomething();
}
}

我们想要测试的businessOperation(),使用了实现了接口Service的两个类。一个类还是内部类。这样的内部类实现,从客户代码是无法访问到的,除非使用反射。

已知一个基础类型(接口、抽象类、其他)我们还是可以伪造其相关的实现或继承的类。通过一个类型变量,我们可以创建一个目标类型引用基础类型的伪造。这种伪造不仅对JVM中已经加载的实现类有效,对测试运行期间被加载的同样有效。这种能力在下面的代码中展现:

@Test
public  void fakingImplementationClassesFromAGivenBaseType() {
new MockUp() {
@Mock int doSomething() { return 7; }
};
 
int result = new TestedUnit().businessOperation();
 
assertEquals(14, result);
}

上面的测试中,所有针对实现了Service#doSomething方法的调用都会被导向伪造方法的实现,忽略对接口方法的实际实现。

你可能感兴趣的:(JMockit官方文档:伪造Facking-part 3 伪造没有指定实现的类)