Ich bin neu in EasyMock und PowerMock und ich bin wahrscheinlich auf etwas fest, das sehr einfach ist.PowerMock und EasyMock-Methode spottend Problem
Es folgt mein Code, Ich mag würde
import java.io.File;
public class FileOp() {
private static FileOp instance = null;
public string hostIp = "";
public static FileOp() {
if(null == instance)
instance = new FileOp();
}
private FileOp() {
init();
}
init() {
hostIp = "xxx.xxx.xxx.xxx";
}
public boolean deleteFile(String fileName) {
File file = new File(fileName);
if(file.exists()) {
if(file.delete())
return true;
else
return false;
}
else {
return false;
}
}
}
Folgende ist mein Testcode ...
import org.easymock.EasyMock;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
import java.io.File;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@RunWith(PowerMockRunner.class)
@PrepareForTest(FileOp.class)
public class FileOp_JTest
{
@Test
@PrepareForTest(File.class)
public void deleteFile_Success(){
try {
final String path = "samplePath";
//Prepare
File fileMock = EasyMock.createMock(File.class);
//Setup
PowerMock.expectNew(File.class, path).andReturn(fileMock);
expect(fileMock.exists()).andReturn(true);
expect(fileMock.delete()).andReturn(true);
PowerMock.replayAll(fileMock);
//Act
FileOp fileOp = Whitebox.invokeConstructor(FileOp.class);
assertTrue(fileOp.deleteFile(path));
//Verify
PowerMock.verifyAll();
}
catch (Exception e) {
e.printStackTrace();
assertFalse(true);
}
}
}
Der Test nicht getestet wird wegen assertTrue (fileOp.deleteFile (Pfad));
Ich verfolgt es auf deleteFile ("samplePath") beim Aufruf versucht, file.exists() zu tun und es gibt false zurück. Allerdings habe ich file.exists() verspottet, um true zurückzugeben.
Ich konnte das Problem beheben. Der Test bestanden, nachdem ich sowohl die Datei-und FileOp Klassen auf der Klassenebene für PrepareForTest Ich sah auch, dass, wenn ich @PrepareForTest von der Klassenebene entfernen und @PrepareForTest ({File.class, FileOp.class}) die Tests bestehen. Wie Sie hier sehen können, habe ich einen @PrepareForTest (File.class) auf Klassenebene und PrepareForTest (FileOp.class) auf Methodenebene gesetzt. Warum passiert das? – maverick