私は、特定のクラスがクラスパス上にあるかどうかをチェックするユーティリティメソッドをテストしようとしています(存在する場合)return true
else return false
。Mock ClassLoader.getSystemClassLoader()。PowermockitoのloadClass
なぜ私はこれをやっているのですか?同じクラスを拡張する独立したクラスにする必要があり、そのうちの1つだけがクラスパス上にあります。特定のものがクラスパスにある場合は、特定のことをする必要があります。
特定のクラスがクラスパス上にあるかどうかを調べるには、以下の種類のメソッドを使用します。 このチェックは、最初のリクエスト後に1回だけ実行されます。 私もClass.forName()
をチェックしましたが、以下のアプローチに進むことに決めました。
public static boolean isMyClassOnClassPath() {
try {
ClassLoader.getSystemClassLoader().loadClass("com.MyClass");
return true;
} catch (ClassNotFoundException ex) {
return false;
}
}
特定のクラスがクラスパスではないではないようfalse
条件を確認するのは簡単です:
私のユーティリティメソッドは次のようになります。 このメソッドがtrue
を返すとき、私は肯定的なシナリオのためにJunit
を書こうとしています。
@Test
public void isMyClassOnClassPathShouldReturnTrueWhenMyClassIsOnClassPath() throws Exception{
PowerMockito.mockStatic(MyClass.class);
ClassLoader classLoader = PowerMockito.mock(ClassLoader.class);
PowerMockito.mockStatic(ClassLoader.class);
PowerMockito.when(ClassLoader.getSystemClassLoader()).thenReturn(classLoader);
//trying to mock classLoader.loadClass, below way is incorrect
//PowerMockito.when(classLoader.loadClass("com.MyClass")).thenReturn(Class<java.lang.Object.class>);
Assert.assertTrue(MyClassUtil.isMyClassOnClassPath());
}
classLoader.loadClass()
を模擬することは可能ですか?
はい、それを行うのが良い方法です。ありがとう:) Class.forname()に関して私は質問を更新しました。 – YogeshK