私はPowermockテストを実行しようとしていますが、2つのテスト方法があります。 最初の方法は、何かを嘲笑せずに通常のテストであり、独立して動作します。 2番目の方法では、PowerMockito.mockStatic(InetAddress.class)を使用します。この方法では、ホストアドレスを操作します。 両方のテストを同時に実行すると、どちらが最初に実行されたかによって、いずれかの方法が失敗します。最初のテスト方法は常に成功し、2番目のテスト方法は失敗します。静的クラスを操作してテストしたものではありません
どうすればこの問題を回避できますか?
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassForTest.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestForClassForTest{
@Test
public void test_is_ok() throws Exception {
boolean internalLogging = ClassForTest.allowInternalLogging();
Assert.assertTrue(internalLogging);
}
@Test
public void test_nok() throws Exception {
PowerMockito.mockStatic(InetAddress.class);
PowerMockito.when(InetAddress.getLocalHost()).thenReturn(inetAddress);
when(inetAddress.getHostAddress()).thenReturn("1.1.1.1");
boolean internalLogging = ClassForTest.allowInternalLogging();
Assert.assertFalse(internalLogging);
}
}
方法 "allowInternalLogging" は "ドメイン" は、現在のネットワークから到達可能であるか否かをInetAddress.getByName( "ドメイン")を用いて、決定:
public final class ClassForTest {
private static Boolean internalLogging;
private ClassForTest() {
}
private static boolean inNetwork() {
// By default no hosts should be found!
boolean hostFound = false;
try {
// "Ping" the hosts by looking up the inetaddress
final InetAddress address = InetAddress.getByName("some-hostname-which-we-know");
// If the address is not null, we were able to lookup the
// specified hostname.
if (address != null) {
hostFound = true;
}
} catch (final UnknownHostException ex) {
// Host could not be found!
hostFound = false;
}
return hostFound;
}
public static Boolean allowInternalLogging() {
if (internalLogging == null) {
try {
internalLogging = inNetwork();
} catch (Exception e) {
internalLogging = false;
LOGGER.debug("Could not determine logging granularity", e);
}
}
return internalLogging;
}
}
"必要ならば具体的な例を提供することができます" ...はい、お願いします:) – glytching
@glytching done – Madrugada
このクラスを使用して再現しようとする人がいなければ、 'ClassForTest.allowInternalLogging()'の実装を見ると便利でしょう。質問で提供されるコードは、実装を推測する必要があります。 – glytching