解惑

解己之惑,解人之惑

标签:junit

性能测试

上周基于JUnit写了个简单的性能测试框架,其实就是用了下Annotation,发现还是很好用的。

/**
 * Performance test annotation.
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PerformanceTest
{
    public String name() default "";
    public int times();
    public boolean stopOnError() default false;
}

阅读全文

JUnit4和Ant的恩怨

今天继续写build脚本,加JUnit的target,但是我开始用的是Ant1.6.2,但是JUnit用的是4.1,发现编译正常,但是运行的时候出错,报的错是ClassNotFoundException,google了下,发现很多人有类似的问题,但是没有多少好的答案,最后在同事的一起努力下搞定,有两种情况:

  • 使用Ant1.6.2或者1.6.5的情况下,修改Test类,增加下面的方法:

public static junit.framework.Test suite() {
                return new JUnit4TestAdapter(TestXxxx.class);
}

还有就是注意ClassPath的定义:

    <path id="classpath">
        <fileset dir="${basedir}">
             <include name="lib/**/*.jar"/>
        </fileset>
        <fileset dir="${web.dir}">
              <include name="WEB-INF/lib/**/*.jar"/>
        </fileset>
  <pathelement path="${class.dir}"/>
    </path>

开始的时候,那个pathelement部分也是和其他的一样使用的fileset,不知道为什么必须使用pathelement才好使。

  • 使用Ant1.7.0的情况下,就不需要修改Test用那个什么JUnit4TestAdapter了。注意,好像Ant1.7.1有问题,可能是我的那个classpath搞的,没有仔细试过,报的错误是Can not open zip file,没有具体指出是那个zip文件找不到,根据google的一些结果建议回滚到Ant1.7.0。

JUnit的Failure Trace的一个问题

不知道有没有人注意过或者写过,就是如果你在使用assertEquals比较一个字符串和一个对象的时候,Failure Trace给出的信息可能会误导你:
junit.framework.AssertionFailedError: expected:<<script language="javascript" src="/js/common.js" />> but was:<<script language="javascript" src="/js/common.js" />>
    at junit.framework.Assert.fail(Assert.java:47)
    at junit.framework.Assert.failNotEquals(Assert.java:282)
    at junit.framework.Assert.assertEquals(Assert.java:64)
    at junit.framework.Assert.assertEquals(Assert.java:71)

期望的内容和实际内容是完全一致的,这个是因为后面的对象的toString方法的输出结果和前面的字符串确实是一样的,但是字符串和一个其它类型的对象进行equals比较一般都是返回false的。

Ant+JUnit+Cobertura

看标题就知道,这个是开发一个Java应用的利器组合,使用Ant完成工程的构建(Build),使用JUnit完成单元测试,使用Cobertura完成代码覆盖测试,也可以辅助查找性能瓶颈一些类型的BUG,下面是一个完整的build.xml范例,可以完全拿来用,不需任何修改,只要你的目录和这里的目录一致(应该也是很通用的):

下载下面的build.xml文件

文件内容:
阅读全文

遭遇OutOfMemoryError

进行运行全部的测试用例的时候发现不能运行完了,到了后面的一些测试用例的时候出现OutOfMemoryError,程序并没有什么大内存消耗,上网查了一下,发现可能是junit导致的,因为teardown并没有清理掉使用过的内存,没有办法,只能修改Run的时候的参数,把内存加大,问题解决。
Eclipse启动JUnit的时候设置的值大概是64M左右,而我加大内存后监控内存使用的结果表明全部的测试用例需要使用100M内存。
方法为:Run->Run…->JUnit->AllTests->(x)=Arguments->VM Arguments: -Xmx500m
注意上面的AllTests为自己要修改的那个包含全部测试用例的Test suite的类。

© 2024 解惑

本主题由Anders Noren提供向上 ↑