我正在尝试使用JUnit和Mockito进行静态导入的内容辅助.
我的内容辅助收藏列表:
org.mockito.Mockito.*
当我对mock()方法使用内容辅助时,该方法是可用的,但导入只是获得常规的非静态导入.为什么这不起作用?
我想实施“责任链”模式,以解决“链接断开”问题,如下所示:
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)
似乎很常见。但是如何使用受保护的抽象方法对此进行测试?解决此问题的方法似乎是:
Handler该子类实现抽象方法。这似乎对测试维护不利。handleRequest在一个或多个具体子类上对该方法实施单元测试。但这似乎不是组织测试的明智方法。我已经读过[ 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)