我嘗試編寫測試,然後使用靜態類。模擬靜態拋出NullPointerException
我有類人:
public class Person {
private int id;
public Person(String name) {
id = Id.generate(name);
}
public int getId() {
return id;
}
}
和類編號:
public class Id {
public static int generate(String name) {
if (name.equals("I")) {
return 42;
}
return 100;
}
}
這是我的測試:
import org.easymock.EasyMock;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.testng.Assert;
import org.testng.annotations.Test;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Id.class })
public class MockStaticTest {
@Test
public void test() throws Exception {
PowerMock.mockStatic(Id.class);
EasyMock.expect(Id.generate(null)).andReturn(55);
PowerMock.replayAll();
Person person = new Person(null);
Assert.assertEquals(person.getId(), 55);
PowerMock.verifyAll();
}
}
當我運行測試,它拋出NPE:
java.lang.NullPointerException
at Id.generate(Id.java:3)
at MockStaticTest.test(MockStaticTest.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
在第17行調用靜態方法Id.generate的代碼。在我看來,這是錯誤的行爲。
我不熟悉EasyMock的,它的怪異的是'expect'運行代碼.. – Maroun
我知道NPE拋出'name.equals( 「I」)',它是意向。這證明'EasyMock.expect(Id.generate(null))。和返回(55);'調用'Id.generate(null)'。在我看來,這是錯誤的行爲。 – Radoslav