【发布时间】:2014-07-31 16:31:27
【问题描述】:
我有一个基于机器 ID 和计数器创建唯一 ID 的静态方法。这个基本原理看起来像这样(不涉及实际算法的细节):
public class Generator {
static int counter = 0;
static synchronized String generate(int machineId) {
return generateID(counter++, machineId);
}
}
在生产中这很好,因为每个节点不会同时执行此方法。但是,我想编写一个启动多个线程的单元测试,以测试是否所有生成的 ID 都满足它们的要求。
显然现在的问题是静态方法,它非常好用,但阻止了以这种方式进行测试,因为测试仅在单台机器上执行,并且计数器在线程之间共享。
有什么方法可以欺骗运行时在一个单元测试中允许一个静态方法的多个实例?
【问题讨论】:
-
你为什么不把它改成一个实例方法让
Generator在生产中成为一个单例(如果必须的话),同时在你的测试中创建多个实例? -
我不喜欢在测试中与实际使用时不同的东西。
标签: java unit-testing static-methods