2012-03-29 17 views
1

私はEasyMockとPowerMockを初めて使用しています。これはおそらく非常に基本的なものです。続きPowerMockとEasyMockメソッドのマッケンシングの問題

は、私はテストが失敗している私のテストコードです...

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); 
    } 
} 

}

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; 
    } 
} 

}

をテストしたいと思います私のコードです のためにassertTrue(fileOp.deleteFile(path));

file.exists()を実行しようとするとdeleteFile( "samplePath")にトレースされ、falseが返されます。しかし、私は真を返すfile.exists()を嘲笑している。

+0

問題を解決できました。テストは、FileとFileOpの両方のクラスをPrepareForTestのクラスレベルに置いたときに渡されました @PrepareForTestをクラスレベルから削除して@PrepareForTest({File.class、FileOp.class})を置くと、パス。 ここでは、@PrepareForTest(File.class)をクラスレベルに、PrepareForTest(FileOp.class)をメソッドレベルに配置しています。 なぜこれが起こっていますか? – maverick

答えて

0

テストで使用しているファイルは侮られていません。あなたはあなたのfileMockを持っていますが、あなたのテストでは使用されていません。あなたがテストされている方法は次の行にそれ自身の新鮮なFileオブジェクトをインスタンス化:あなたのDELETEFILE方法ではなく、文字列のFileオブジェクトを取ると、あなたがそこにあなたのmockObjectを注入し、すべてのコールが正しいかどうかを確認でき

File file = new File(fileName); 

場合。

関連する問題