我很想知道Java如何测试其API。让我们说,我对ConcurrentHashMap类感兴趣,这个类会有任何单元测试吗?如果是这样,它是否可供公众使用?
答案 0 :(得分:7)
当你说" Java "你可能指的是 Java Development Kit (JDK),它来自 OracleJDK 和 OpenJDK (OracleJDK本质上是OpenJDK与a few extras)。 OpenJDK是开源的;并且可以在此处找到所有项目的源代码:
特别是,这是 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>