Один из моих тестов JUnit дает мне исключение NullPointerException, и я не могу понять, почему.Это содержимое тестового класса, PacketWrapperTest:
/**
* Mock Node for Packet A.
*/
private Node nA;
/**
* Packet A.
*/
private PacketWrapper packetA;
/**
* Mock Node for Packet B.
*/
private Node nB;
/**
* Packet B.
*/
private PacketWrapper packetB;
/**
* Relationship A
*/
Relationship RelA;
/**
* Relationship B
*/
Relationship RelB;
@Before
public void setup() {
nA = mock(Node.class);
nB = mock(Node.class);
packetA = new PacketWrapper(nA);
packetB = new PacketWrapper(nB);
RelA = mock(Relationship.class);
RelB = mock(Relationship.class);
}
@After
public void tearDown() {
packetA = null;
packetB = null;
}
/*
* ---------------- Test hashContents() ---------------
*/
@Test
public void testHashContents() {//TODO: Fix
when(nA.getProperty(PacketWrapper.KEY_CONTENTS)).thenReturn(new byte[] {1});
packetA.hashContents();
verify(nA).setProperty(PacketWrapper.KEY_CONTENTS, packetA.getContents().hashCode());
verify(nA).setProperty(PacketWrapper.IS_HASH, true);
}
Это соответствующее содержимое PacketWrapperTest:
/**
* DB key for the contents property.
*/
static final String KEY_CONTENTS = "contents";
/**
* DB key for the is_hashed property.
*/
static final String IS_HASH = "is_hashed";
/**
* Underlying neo4j node.
*/
private final Node neo4jNode;
/**
* Creates a new Packet wrapping the specified node
*
* @param neo4jNode
* underlying neo4j node.
*/
public PacketWrapper(Node neo4jnode) {
this.neo4jNode = neo4jnode;
}
@Override
public byte[] getContents() {
return (byte []) neo4jNode.getProperty(KEY_CONTENTS);
}
@Override
public void setContents(byte[] newContents) {
neo4jNode.setProperty(KEY_CONTENTS, newContents);
}
@Override
public void hashContents() {
neo4jNode.setProperty(KEY_CONTENTS, ((byte[])getContents()).hashCode());
neo4jNode.setProperty(IS_HASH, true);
}
@Override
public int hashCode() {
return neo4jNode.hashCode();
}
А вот трассировка стека:
java.lang.NullPointerException
at org.whispercomm.manes.server.graph.PacketWrapperTest.testHashContents(PacketWrapperTest.java:124)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Хотя по какой-то причине Java не дала мне такой длинной трассировки стека, у меня были только первые две строки, а остальные я видел, когда копировал и вставлял ...
РЕДАКТИРОВАТЬ: Извините, забылупомянуть, что строка 124 - это
verify(nA).setProperty(PacketWrapper.KEY_CONTENTS, packetA.getContents().hashCode());
Кроме того, я использую библиотеки neo4j.
EDIT2: после добавления некоторых операторов отладки это тестовый код:
@Test
public void testHashContents() {//TODO: Fix
byte[] testByte = new byte[] {1};
when(nA.getProperty(PacketWrapper.KEY_CONTENTS)).thenReturn(testByte);
packetA.hashContents();
System.out.println(testByte.hashCode());
System.out.println(packetA.getContents());
System.out.println(packetA.getContents().hashCode());
verify(nA, times(3)).setProperty(PacketWrapper.KEY_CONTENTS, packetA.getContents().hashCode());
verify(nA).setProperty(PacketWrapper.IS_HASH, true);
}
И это вывод:
26281671
[B@19106c7
26281671
Строка:
verify(nA, times(3)).setProperty(PacketWrapper.KEY_CONTENTS, packetA.getContents().hashCode());
вызывает исключение.