我有 0..n 个对象,每个对象都需要一个唯一的标识符,它们是通过以下方式创建的:
public class Squirrel {
private static numSquirrels = 0;
private String id = null;
public Squirrel() {
this(String.valueOf(numSquirrels++);
}
public Squirrel(String id) {
this.id = id;
}
}
这在很多方面都是一个问题,但我会给出一个:
When unit testing, the numSquirrels variable carries over between tests, even though I may be working with a different population of squirrels. That means that their IDs continue to increment when I'd like to start fresh.
- 现在是使用 SquirrelFactory( children 非常喜欢的工厂)的正确时机吗?
- 我应该使用依赖注入(inject)将 Factory 传递到 Squirrel 对象中,还是应该将 Squirrel 类包含在具有与外部世界接口(interface)的 Squirrel Factory 中?
- 如果我希望用户能够设置 ID(或至少建议 ID),如何确保唯一性?
最佳答案
我认为这个实现会很好地工作,尽管如果您正在处理并发,您可能应该使用 AtomicInteger。
您的单元测试问题可以通过使用模拟和将其包装在另一个类中进行模拟的组合来解决。看这个帖子 How to mock a static variable in java using JMock
或者,一个简单的解决方案是公开静态变量的 setter,在测试用例结束时,您可以将其设置回 0,或者任何“重置”对您意味着什么。
关于java - 如何用 Java 中的工厂替换静态计数变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758857/