我有静态字段的对象:
class Project() {
private static id;
private int projectid;
public Project(fileds) {
this.id = id++;
}
//methods
}
现在我想用多个测试来测试这个类。问题是当一个测试完成后,我的对象不会从内存中删除:
@Test
public test1(){
Project project1 = new Project();
Project project2 = new Project();
}
@Test
public test2(){
here the objects from previous tests are still exist since the static field is two times increased
}
有没有什么办法可以在每次测试后冲洗它们?因为我能克服它的唯一方法 - 使用忽略......
答案 0 :(得分:3)
我认为写得不好。
如果我正确解释了这一点,您需要一个与静态计算所计算的每个实例关联的唯一projectid
。像这样更改你的代码:
class Project() {
private static int id;
private int projectid;
public Project(fileds) {
// This notation makes clear that the static variable associated w/ class
this.projectid = Project.id++;
}
//methods
}
这种方式projectid
将从0开始,每次创建新实例时递增1。
你不应该担心潮红或项目ID是多少。这对您的方法测试来说并不重要。
如果必须重置为零,请将静态变量设为public:
class Project() {
public static int id;
private int projectid;
public Project(fileds) {
// This notation makes clear that the static variable associated w/ class
this.projectid = Project.id++;
}
//methods
}
以下是您在测试中重置的方法(如果必须):
@Test
public test1(){
Project.id = 0;
Project project1 = new Project();
Project project2 = new Project();
}
@Test
public test2(){
// reset the count
Project.id = 0;
// here the objects from previous tests are still exist since the static field is two times increased
}
答案 1 :(得分:0)
静态对象在应用程序启动时创建,并且只有一个实例。它被称为Class variable
。请参阅此SO question。
因此,无论何时执行id++;
,它实际上都会更新单个类级别的id对象。 this.id
真的没有意义。
@duffymo正确指出。你需要在构造函数中使用它。
class Project { // removed "()"
private static int id; // added int
private int projectid;
public Project() { // removed fileds
this.projectid = Project.id++; // updated
}
//methods
}
答案 2 :(得分:0)
首先,这是这种静态变量不受欢迎的主要原因。
如果你真的需要,你有几个选择: