2013-08-25 59 views
0

我有一个集成器类,我需要测试,类构造函数实例化服务客户端。由于服务客户端是外部依赖项,我想测试集成者的个人责任。代码看起来像这样。什么是模拟JUnit构造函数的最佳方法?

public class Integrator { 

    Client client; 

    public Integrator() { 
     client = new RemoteClient(); 
    } 

    public String invokeClient() { 
     .... 
    } 
} 

什么可以是最好的方法来嘲笑这?另外,我需要确保代码覆盖率。

回答

1

使用依赖注入,所以你不创建客户端:

public Integrator(Client client) { 
    //... argument checking omitted 
    this.client = client; 
} 

现在你的测试可以创建可直接传递模拟客户端。

你仍然可以保持无参数的构造以及:

public Integrator() { 
    this(new RemoteClient()); 
} 
+0

有集成商和客户之间相当紧密的耦合,因为依赖反转,上一级已经照顾。 –

+0

有多层次的依赖倒置没有什么坏处。另外,它听起来像你需要稍微松散的耦合,所以你可以嘲笑它。 – dkatzel

+0

我会描述这个问题,集成商通过DI挑选客户,现在每个客户都与其服务提供商紧密耦合。所示的例子并不合适,它表明我们正在选择一个可以使用DI的客户端,但正如我们所说的,我们首先使用DI接入客户端,然后在紧密耦合的客户端中接入服务提供商。现在再次出现一个DI,会迫使集成商选择一个客户端,并指定服务提供商,这是没有意义的。 –

相关问题