文档章节

单元测试出现ClassNotFoundException错误(已解决)

chyileon
 chyileon
发布于 2013/05/29 23:59
字数 339
阅读 1423
收藏 3
//MaxTemperatureMapperTest.java

package v1;
// cc MaxTemperatureMapperTestV1 Unit test for MaxTemperatureMapper
// == MaxTemperatureMapperTestV1Missing
// vv MaxTemperatureMapperTestV1
import static org.mockito.Mockito.*;

import java.io.IOException;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.OutputCollector;
import org.junit.*;

public class MaxTemperatureMapperTest {

  @Test
  public void processesValidRecord() throws IOException {
    MaxTemperatureMapper mapper = new MaxTemperatureMapper();

    Text value = new Text("0043011990999991950051518004+68750+023550FM-12+0382" +
                                  // Year ^^^^
        "99999V0203201N00261220001CN9999999N9-00111+99999999999");
                              // Temperature ^^^^^
    OutputCollector<Text, IntWritable> output = mock(OutputCollector.class);

    mapper.map(null, value, output, null);

    verify(output).collect(new Text("1950"), new IntWritable(-11));
  }
}


//MaxTemperatureMapper.java

package v1;
// cc MaxTemperatureMapperV1 First version of a Mapper that passes MaxTemperatureMapperTest
import java.io.IOException;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
//vv MaxTemperatureMapperV1
public class MaxTemperatureMapper extends MapReduceBase
  implements Mapper<LongWritable, Text, Text, IntWritable> {

  public void map(LongWritable key, Text value,
      OutputCollector<Text, IntWritable> output, Reporter reporter)
      throws IOException {

    String line = value.toString();
    String year = line.substring(15, 19);
    int airTemperature = Integer.parseInt(line.substring(87, 92));
    output.collect(new Text(year), new IntWritable(airTemperature));
  }
}

运行步骤:

  • 目录结构

-java

    -v1

        -MaxTemperatureMapper.java

        -MaxTemperatureMapperTest.java

  • 编译

#cd java/v1 #package v1;

#javac MaxTemperatureMapperTest.java MaxTemperatureMapper.java


  • 运行
 hadoop org.junit.runner.JUnitCore MaxTemperatureMapperTest


  • 结果
JUnit version 4.5
Exception in thread "main" java.lang.NoClassDefFoundError: MaxTemperatureMapperTest (wrong name: v1/MaxTemperatureMapperTest)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:171)
        at org.junit.runner.JUnitCore.runMain(JUnitCore.java:79)
        at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:54)
        at org.junit.runner.JUnitCore.main(JUnitCore.java:46)

解决方法:

出现这样的问题是由于对java不熟悉,参考

http://stackoverflow.com/questions/4951695/receiving-wrong-name-noclassdeffounderror-when-executing-a-java-program-from-t

由于在当前目录(v1)中没有包v1,所以应该将当前目录设置为包v1所在的目录(java)

cd ..

hadoop org.junit.runner.JUnitCore v1.MaxTemperatureMapperTest

结果:

JUnit version 4.5
.I.
Time: 0.643


OK (1 test)


© 著作权归作者所有

chyileon
粉丝 0
博文 8
码字总数 1877
作品 0
海淀
私信 提问
【异常】碰到的两个连续出现的异常

背景 在测试环境的系统,一个功能突然无法使用了,于是开始翻找日志,加上做实时的测试,在日志中发现了如下的错误: Invalid use of BasicClientConnManager: connection still allocated ...

tr1912
2018/04/21
0
0
ClassNotFoundException和NoClassDefFoundError的区别

正如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有区别的,我们可以从异常中恢复程序但却不应该尝试从错误中恢...

一条大河波浪宽
2013/10/05
23.9K
0
数据库开发 - SQL注入与防范单元作业

题目 1(100分)有一张学生表 现在需要根据学生名称获取学生的期末考试分数。 请指出上面这段程序存在什么安全风险?并给出具体的测试用例。 请重新编写应用程序,解决上述风险。 初始化SQL...

抢小孩糖吃
2016/10/01
53
0
maven打包报错,设置跳过单元测试解决

很多时候在后台接口写完后,我们都会写对应的单元测试类去验证一下接口是否有问题的。但是很多时候在我们用在打包的时候往往会因为这些单元测试类不通过导致打包失败的。在idea如果的打包时不...

chinpang
2018/09/04
0
0
EntityFramework Core并发导致显式插入主键问题

前言 之前讨论过EntityFramework Core中并发问题,按照官网所给并发冲突解决方案以为没有什么问题,但是在做单元测试时发现too young,too simple,下面我们一起来看看。 .NET Core 1.1单元测...

jeffcky
2017/02/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JS--function

一、声明提前(hoist) 在js程序开始执行前,引擎会查找所有var声明的变量和function声明的函数,集中到当前作用域顶部集中创建,赋值留在原地 二、三种创建函数的方式 1、声明方式创建函数-...

wytao1995
今天
4
0
微服务之间调用控制器注解类型的差异

今天在一个业务服务通过Feign调用文件服务上传文件时遇到了几个问题: 1. 提示http请求头过大的问题; 此时需要修改bootstrap.yml,加入 server: max-http-header-size: 10000000 用以放大...

不再熬夜
今天
7
0
用 4G 工作是什么体验

七月开始,因为工作原因,在公司附近租了个住处,方便工作。离公司近了,感觉就是不一样,之前每天 5:30 就要起床赶地铁,现在可以睡到自然醒,一看才 7 点,悠闲的起床洗漱,踱步到公司,都...

zzxworld
今天
6
0
sonar报错volatile

问题发生 原先代码如下: //认证授权码private static volatile String AUTHORIZATION_CODE = "init"; git push 之后,sonar认为这是个bug检测报告截图如下: 分析排查 解释说明: Markin...

开源小菜鸟2333
今天
5
0
《Java实践指南》--读后

闲读《Java实践指南》... 1.lvy 某些项目中能够看到ivy.xml。早期使用ant的项目中,常常用ivy.xml来下载项目依赖。 2.ant 作为java程序员,应该都知道ant,虽然可能用过的人不多。为什么ant...

RippleChan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部