我單元測試類像下面靜態成員值被輸送到下一個測試
public class A {
private static String aStr = null;
public void doSomething() {
if (null == aStr) {
// do something to init aStr, and this initialized val gets cached for future calls.
aStr = some_val;
} else {
// do something else using aStr value.
}
}
查閱而單元測試此我做:
public class ATest {
private A a;
@BeforeMethod
public void setup() {
a = new A();
}
@Test
public void test1() {
a.doSomething();
// assert on some_val being fetched correctly.
}
@Test
public void test2() {
a.doSomething();
// assert again for some_val
// this is where some_val fetching is not invoked at all, while debugging I
// can see that aStr is already being initialized from previous test.
}
}
我被假設由於我重新初始化在@BeforeMethod設置中的對象'a',我應該得到所有測試的空值。是不是這個假設是正確的?
爲什麼要通過創建新實例來重新初始化靜態字段? –
我認爲你對'static'關鍵字的含義感到困惑。這意味着一個領域不再屬於一個實例。對於'static',它會得到一個由該類的所有實例共享**的字段。所以並不是說這個類的每個實例都有它自己的'aStr',它們全部共享**相同的''aStr'字段。 – Zabuza
當一個新的對象重置它們的值時,對靜態成員有什麼意義?如果是這樣的話,Java將被邏輯破壞。 – Tom