JUnit类Path和ContextClassLoader不一致或我的误解

时间:2013-02-14 00:28:59

标签: java junit classloader

我想要做的是从jar加载.class文件(编译的类文件)作为资源流。这个尝试是从JUnit测试用例内部完成的。

  1. 测试用例编译并运行没有问题 SO:AFAIK资产类应该在classpath中可用
  2. 完整的类名需要与文件结构中的位置一致 SO:我们可以使用目录分隔符替换包名称中的点以获取类文件位置
  3. 我们可以使用getResourceAsStream方法访问当前类路径中的所有内容。
  4. 让我提供一些代码以便更好地理解。

    package org.jboss.shrinkwrap.impl.nio.file;    
    import org.jboss.shrinkwrap.api.asset.Asset;
    
    public class FileStoreTestCase {
    // (...)
    @Test
    public void usedSpace(){    
        final Class<?> classToAdd = Asset.class;
        final String pathToClass = new StringBuilder(classToAdd.getName().replace('.', File.separatorChar)).append(
                ".class").toString();
    
        final InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(pathToClass);
    
    }
    

    问题是在上面的代码中,“in”变量始终为null。你知道为什么吗?我怎么能让它发挥作用?

    感谢您的任何意见。

1 个答案:

答案 0 :(得分:1)

尝试使用replace('。','/'),即使用'/'而不是File.separatorChar