就是這樣。您的測試等級:
import java.util.Random;
public class Simple {
public String id1()
{
Random random=new Random();
int i=random.nextInt();
if(i<0)
{
i=-(i);
}
if(i<1000)
i=i+1000;
while(i>9999)
{
i=i/10;
}
return i+"";
}
}
測試(我使用powermock-mockito-1.6.2)。你應該處理生成的數字:
import java.util.Random;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Random.class, Simple.class })
public class SimpleTest {
@Test
public void ifGenerateNumberLessZeroSetItMoreThanZero() throws Exception {
Random rand = Mockito.mock(Random.class);
PowerMockito.mockStatic(Random.class);
PowerMockito.whenNew(Random.class).withNoArguments().thenReturn(rand);
Mockito.when(rand.nextInt()).thenReturn(-9999);
Simple simple = new Simple();
Assert.assertEquals("9999", simple.id1());
}
}
這就是所謂的反射? –
認真:不要按照這個建議。你的問題是你創建了無法測試的代碼;並且使用PowerMock將導致更多的麻煩...比簡單地去修復**破碎的設計。 – GhostCat
@DavidFindlay PowerMock是**不**使用反射。這是一個模擬框架,它只需要編譯的類文件,並修改**中的字節碼以使其可測試。這就是爲什麼PowerMock的「好用例」數量非常接近於零。 – GhostCat