私はテストしようとしてclass A
いclass B
ます。
public class A {
@Autowired
private B b;
public int foo(int x, int y) {
int z = b.bar(x, y, false);
//do something with z
return z;
}
}
私はjunitをと一緒に使用してpowermock
、でメソッドをmockito
テストしようとしています。foo
class A
@RunWith(PowerMockRunner.class)
@PrepareForTest(A.class)
public class TestA {
@Test
private void testFoo() {
B b = PowerMockito.mock(B.class);
when(b.bar(2,3,false)).thenReturn(5);
A a = PowerMockito.spy(new A());
Whitebox.setInternalState(a, "b", b);
int z = a.foo(2,3);
Assert.assertEquals(10,z);
}
}
テストを実行しようとすると、NullPointerException
内からを取得しますclass B
。bar
デバッガーを使用した後、のメソッドをスタブした直後にB class
、bar
メソッドが呼び出されることがわかりました。この場合のnullポインタ例外は、Bクラスが適切に初期化されていないため、正常です。
なぜこれが起こっているのか、そして私はそれについて何ができるのか誰かが説明できますか?