What is wrong with the UUID.randomUUID()
- it just can't be mocked
Is it possible to mock? Or i have an error in my source?
Look at example:
1) Class that is tested
package com.grayen;
import java.util.UUID;
public class TestedClass {
public UUID getUuid() {
return UUID.randomUUID();
}
public UUID getUuidFromWrapper() {
return UuidWrapper.randomUUID();
}
}
One method uses a wrapper for UUID and i can mock that wrapper!
2) Wrapper for real UUID (all modifiers the same)
package com.grayen;
import java.util.UUID;
public final class UuidWrapper {
public static UUID randomUUID() {
return UUID.randomUUID();
}
}
3) Testing (last commented line throws an exception)
package com.grayen;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.util.UUID;
import static org.junit.Assert.assertEquals;
@PrepareForTest({UUID.class, UuidWrapper.class})
@RunWith(PowerMockRunner.class)
public class TestedClassTest {
@Test
public void testMethod() {
UUID uuid = UUID.randomUUID();
PowerMockito.mockStatic(UUID.class);
PowerMockito.mockStatic(UuidWrapper.class);
PowerMockito.when(UUID.randomUUID()).thenReturn(uuid);
PowerMockito.when(UuidWrapper.randomUUID()).thenReturn(uuid);
TestedClass testedClass = new TestedClass();
assertEquals(uuid, testedClass.getUuidFromWrapper());
//assertEquals(uuid, testedClass.getUuid());
}
}