小编Fat*_*ama的帖子

为什么Eclipse Content Assist不使用静态导入

我正在尝试使用JUnit和Mockito进行静态导入的内容辅助.

我的内容辅助收藏列表: org.mockito.Mockito.*

当我对mock()方法使用内容辅助时,该方法是可用的,但导入只是获得常规的非静态导入.为什么这不起作用?

eclipse content-assist

6
推荐指数
1
解决办法
2391
查看次数

如何以可测试的方式实施责任链?

我想实施“责任链”模式,以解决“链接断开”问题,如下所示:

 public abstract class Handler{

   private Handler m_successor;

   public void setSuccessor(Handler successor)
   {
     m_successor = successor;
   }

   protected abstract boolean handleRequestImpl(Request request);

   public final void handleRequest(Request request)
   {
     boolean handledByThisNode = this.handleRequestImpl(request);
     if (m_successor != null && !handledByThisNode)
     {
       m_successor.handleRequest(request);
     }
   }
 }
Run Code Online (Sandbox Code Playgroud)

似乎很常见。但是如何使用受保护的抽象方法对此进行测试?解决此问题的方法似乎是:

  1. 实现仅测试的子类,Handler该子类实现抽象方法。这似乎对测试维护不利。
  2. 将抽象方法的可见性更改为public,但是我不需要更改SUT以适应测试。
  3. 将抽象类视为足够简单,无需进行单元测试。嗯
  4. handleRequest在一个或多个具体子类上对该方法实施单元测试。但这似乎不是组织测试的明智方法。
  5. 有某种方式可以使用模拟对象吗?我已经尝试过Mockito,但似乎无法绕开受保护的可见性。

我已经读过[ 1 ],这种测试问题意味着设计是错误的,并建议使用组合而不是继承。我现在正在尝试此操作,但是奇怪的是,此模式的推荐实现存在此问题,但是我无法找到有关对其进行单元测试的任何建议。

更新:我已将抽象类替换为依赖关系反转,如图所示,现在可以使用Mockito轻松对其进行测试。看起来仍然像是责任链...我错过了什么吗?

// Implement a concrete class instead
public class ChainLink {

  // Successor as before, but with new class type
  private ChainLink m_successor;

  // New …
Run Code Online (Sandbox Code Playgroud)

java unit-testing chain-of-responsibility

6
推荐指数
1
解决办法
2316
查看次数