Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring boot中编写筛选器(OncePerRequestFilter)的单元测试_Java_Spring Boot_Junit_Servlet Filters - Fatal编程技术网

Java 在Spring boot中编写筛选器(OncePerRequestFilter)的单元测试

Java 在Spring boot中编写筛选器(OncePerRequestFilter)的单元测试,java,spring-boot,junit,servlet-filters,Java,Spring Boot,Junit,Servlet Filters,我有一个扩展OncePerRequestFilter的Filter类。此筛选器用于捕获审核数据,然后传递给异步方法以在数据库中持久化。 我需要为整个场景编写测试用例。如何做到这一点?我在Junit方面没有什么专业知识 public class AuditFilter extends OncePerRequestFilter { private static final Logger LOGGER = LoggerFactory.getLogger(AuditFilter.class);

我有一个扩展OncePerRequestFilter的Filter类。此筛选器用于捕获审核数据,然后传递给异步方法以在数据库中持久化。 我需要为整个场景编写测试用例。如何做到这一点?我在Junit方面没有什么专业知识

public class AuditFilter extends OncePerRequestFilter {

  private static final Logger LOGGER = LoggerFactory.getLogger(AuditFilter.class);
  private AuditLogManager auditLogManager;
  private String auditMode;
  private List<String> urlPatterns;

  /**
   * @param auditLogManager - processes the audit logs.
   * @param auditMode - modes of auditing (OFF,BASIC,DETAILED).
   * @param urlPatterns - the URL patterns for which auditing to be done.
   */
  public AuditFilter(final AuditLogManager auditLogManager, final String auditMode,
      final List<String> urlPatterns) {
    this.auditLogManager = auditLogManager;
    this.auditMode = auditMode;
    this.urlPatterns = urlPatterns;
  }

  @Override()
  protected void doFilterInternal(final HttpServletRequest request,
      final HttpServletResponse response, final FilterChain filterChain)
      throws ServletException, IOException {
    //capture audit data from request
      try {
        filterChain.doFilter(wrappedRequest, wrappedResponse);
      } finally {
        //capture audit data from response
        // Executing asynchronous call. auditLogManager uses @Async annotation. Need i=integration test for auditLogManager code also
        auditLogManager.log(auditInfo, auditMode);
      }    
  } 
}
公共类AuditFilter扩展了OncePerRequestFilter{
私有静态最终记录器Logger=LoggerFactory.getLogger(AuditFilter.class);
私人AuditLogManager AuditLogManager;
私有字符串审核模式;
私有列表模式;
/**
*@param auditLogManager-处理审核日志。
*@param auditMode-审核模式(关闭、基本、详细)。
*@param urlPatterns-要对其执行审核的URL模式。
*/
公共AuditFilter(最终AuditLogManager AuditLogManager、最终字符串auditMode、,
最终列表(模式){
this.auditLogManager=auditLogManager;
this.auditMode=auditMode;
this.urlPatterns=urlPatterns;
}
@覆盖()
受保护的无效doFilterInternal(最终HttpServletRequest请求,
最终HttpServletResponse响应,最终过滤器链(过滤器链)
抛出ServletException、IOException{
//从请求中捕获审核数据
试一试{
filterChain.doFilter(wrappedRequest,wrappedResponse);
}最后{
//从响应捕获审核数据
//正在执行异步调用。auditLogManager使用@Async注释。还需要i=auditLogManager代码的集成测试
日志(auditInfo,auditMode);
}    
} 
}

我需要在maven构建期间对AuditFilter和AuditLogManager(类具有异步方法)执行的每个操作进行单元测试。

您的问题令人困惑。您想要单元测试还是集成测试?两者完全不同。单元测试是针对原始Java源代码执行的(在部署之前)。对正在运行的服务器执行集成测试(部署后)。对于单元测试,您将需要某种模拟库(例如Mockito),以便模拟与实际运行的服务器上相同的条件(因此这非常可疑)。对于集成测试,您需要一个复杂的集成测试框架(例如Arquillian+Selenium),但您没有指定当前使用的框架。很抱歉没有正确提及。我只需要一个单元测试。这些测试用例应该在我构建项目时执行。仅此而已。集成测试也会在构建期间执行。我想我需要执行以下操作。首先,我需要测试OncePerRequestFilter。对于从过滤器调用的异步代码,我需要单独测试。它是?