码迷,mamicode.com
首页 > 编程语言 > 详细

java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter

时间:2018-06-10 23:01:26      阅读:814      评论:0      收藏:0      [点我收藏+]

标签:unit test   加载   string   tst   intercept   rgs   jar   sde   current   

  今天想写个随笔,最近经常遇到使用junit的时候报java.lang.NoClassDefFoundError,今天算是恍然大悟了,原来junit虽然在gradle里面配置了,也在Project and External Dependencies中看到了junit的jar包,并能在这个junit的jar包里面找到org/junit/runner/manipulation/Filter这个类,但是run as junit test的时候就偏偏要报java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter。

技术分享图片

 

  以为是gradle配置问题,testImplementation、implementation、api都不行  

  后来想想,出现这种情况无外乎gradle中引入的jar包(即Project and External Dependencies中的jar包)在run as junit test的时候并没有被jvm加载,所以才会出现这种现象,解决办法就是在build path 中add library,加入junit

  下面附上在main里面打出已加载的class:

package proxy;

import java.lang.reflect.Field;
import java.lang.reflect.Proxy;
import java.util.Vector;

import org.junit.Test;

/**
* Created by 136187300@qq.com on 2018年6月9日.
*/

public class TestProxy {

	@Test
	public void test1() {
		
		TestLog testLog = new TestLogImpl();
		TestLogInterceptor testLogInterceptor = new TestLogInterceptor();
		testLogInterceptor.setTarget(testLog);
		TestLog proxy = (TestLog)Proxy.newProxyInstance(testLog.getClass().getClassLoader()
				, testLog.getClass().getInterfaces(), testLogInterceptor);
		proxy.print();
	}
	
	public static void main(String[] args) {
		TestLog testLog = new TestLogImpl();
		TestLogInterceptor testLogInterceptor = new TestLogInterceptor();
		testLogInterceptor.setTarget(testLog);
		TestLog proxy = (TestLog)Proxy.newProxyInstance(testLog.getClass().getClassLoader()
				, testLog.getClass().getInterfaces(), testLogInterceptor);
		proxy.print();
		try {
			new TestProxy().printClass();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void printClass() throws Exception {
		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        Class cla = classLoader.getClass();
        while (cla != ClassLoader.class)
            cla = cla.getSuperclass();
        Field field = cla.getDeclaredField("classes");
        field.setAccessible(true);
        Vector v = (Vector) field.get(classLoader);
        for (int i = 0; i < v.size(); i++) {
            System.out.print(((Class)v.get(i)).getName()+",");
            if(i%10 == 0)System.out.println("");
        }
	}
}

  

  

java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter

标签:unit test   加载   string   tst   intercept   rgs   jar   sde   current   

原文地址:https://www.cnblogs.com/xiaodebing/p/9164675.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!