Java类的单元测试和源代码

时间:2015-07-30 23:08:23

标签: java

我很想知道Java如何测试其API。让我们说,我对ConcurrentHashMap类感兴趣,这个类会有任何单元测试吗?如果是这样,它是否可供公众使用?

3 个答案:

答案 0 :(得分:7)

当你说" Java "你可能指的是 Java Development Kit (JDK),它来自 OracleJDK OpenJDK (OracleJDK本质上​​是OpenJDK与a few extras)。 OpenJDK是开源的;并且可以在此处找到所有项目的源代码:

http://hg.openjdk.java.net/

特别是,这是 jdk7 项目目录的可浏览版本。

  

我很想知道Java如何测试其API。让我们说,我对ConcurrentHashMap类感兴趣,这个类会有任何单元测试吗?如果是这样,它是否可供公众使用?

是的,有关所有jdk7测试的列表,请查看 jdk7/jdk/test

如果您对from math import acos from math import sqrt from math import pi def length(v): return sqrt(v[0]**2+v[1]**2) def dot_product(v,w): return v[0]*w[0]+v[1]*w[1] def determinant(v,w): return v[0]*w[1]-v[1]*w[0] def inner_angle(v,w): cosx=dot_product(v,w)/(length(v)*length(w)) rad=acos(cosx) # in radians return rad*180/pi # returns degrees def angle_clockwise(A, B): inner=inner_angle(A,B) det = determinant(A,B) if det<0: #this is a property of the det. If the det < 0 then B is clockwise of A return inner else: # if the det > 0 then A is immediately clockwise of B return 360-inner 测试感兴趣,请查看 jdk7/jdk/test/java/util/concurrent/ConcurrentHashMap

注意: JDK测试可能看起来有点尴尬,因为它不使用JUnit,它使用JTreg

答案 1 :(得分:0)

在像ConcurrentHashMap这样的jdk中打包的任何类都经过测试,你几乎不需要担心所有的情况。如果您实现了一个定义良好的接口,那么可以使用可以针对您的API运行的测试用例并检查它是否是自满。此外,如果您定义要公开的新API,则必须使用JUnit或TestNg编写测试用例。在这里,您的测试用例的目的应该是检查您的API是否给出了预期的结果。如果您涵盖了使用API​​的所有组合,那么您可以确定何时存在回归。

Offtopic:集成测试假设在集成所有组件时测试整个项目。

[更新] 如果你真的需要测试ConcurrentHashMap你可以使用一个使用ConcurrentHashMap的示例项目,请记住你最好选择多线程项目。

答案 2 :(得分:0)

您可能无法获得Oracle Java的源代码(以及测试代码)。但是,由于OpenJDK理论上遵循与Oracle Java相同的行为规范(至少对于我熟悉的所有部分),您可以使用他们的单元测试来测试您的库。可以浏览OpenJDK jdk8的源here(请参阅test目录以获取测试),您可以在其主页上找到其他版本的Java。

然而,正如Erranda指出的那样,你应该问自己是否要测试现有的库。它们可能比你最终编写的任何内容都要经过更彻底的测试,除非你想在找到问题后从源代码重新编译Java(这可能导致兼容性问题),在库中发现错误会有什么好处? / p>