ヘルパークラスの静的メソッドからvalue
ENUMを取得するPowerMockRunnerでクラスをテストしています。このvalue
ENUMがclassUnderTestのSWITCH文に渡されると、NULLポインタがスローされます。Switch StatementのPowerMockito列挙型NPE
私はデバッグしましたが、ENUMが正しく設定されている(名前、タイプ、序数がすべて期待どおりになっている)ので、NPEがスローされる理由は不明です。誰も似たような問題に遭遇しますか?
注:classUnderTestにはプライベートメソッドの呼び出しが含まれているため、PowerMockitoが必要です。以下は、(問題に無関係の)多くのコードが削除された完全な例です。静的メソッドと
public class TestService extends BaseXAServiceBean
{
@Override
public ValueObject runExecute(ValueObject param) throws RemoteException, ServiceException
{
try
{
ValueEnum value = ValueServiceHelper.getValueType(param1(),
param2());
// value populated successfully with ENUM at this point
// NPE thrown when value is passed into below switch
switch (value)
{
case VALUE1:
{
// logic here...
break;
}
case VALUE2:
{
// logic here...
break;
}
case VALUE3:
{
// logic here...
break;
}
}
}
catch (ServiceException e)
{
throw e;
}
catch (Exception e)
{
throw new ServiceException(e, AppErrorCodes.INT.SL06, AppErrorCodes.SL06.E04);
} finally {
// clean up
}
}
}
ヘルパークラス:
public class ValueServiceHelper
{
public static ValueEnum getValueType(String param1, String param2) throws ServiceException
{
ValueEnum retVal = ValueEnum.VALUE3;
// proxy is mocked
ProductProxy proxy = ProxyFactory.createFactory("1").getProductProxy();
try
{
if (proxy.isValue1(param2))
{
retVal = ValueEnum.VALUE1;
}
else if (proxy.isValue2(param2))
{
retVal = ValueEnum.VALUE2;
}
}
return retVal;
}
}
テストクラス:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ProxyFactory.class})
public class ValueTest {
@Spy
@InjectMocks
private TestService service = new TestService();
@Mock
private ProxyFactory proxyFactory;
@Mock
private Proxy proxy;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
PowerMockito.mockStatic(ProxyFactory.class);
}
@Test
public void testSuccess() throws Exception {
// given
// when
PowerMockito.when(ProxyFactory.createFactory("1")).thenReturn(proxyFactory);
PowerMockito.when(proxyFactory.getProductProxy()).thenReturn(proxy);
PowerMockito.when(proxy.isValue1(param2)).thenReturn(true);
PowerMockito.when(proxy.isValue2(param2)).thenReturn(true);
service.runExecute(request);
// then
}
}
完全で検証可能な例を提供する必要があります。答えが出るほどの情報がありません。 –
今すぐ完全な例を含めるように更新しました.... –
[おそらく関連していますか?](https://github.com/powermock/powermock/issues/394) 'if'文を使用して問題を解決するかどうかを確認してください。 –