2012-01-11 12 views
4

私は自分のコードに対してJUnitテストを書こうとしていますが、いくつかのメソッドでは他のメソッドが呼び出されています。これらの呼び出しを模擬することは可能ですか?テストしているクラスでメソッド呼び出しをモックアウトできますか?

など。

s3FileWrite(File file, Status status) 
{ 
    S3 s3   = new S3(file.getName, s3Service) 
    String key = s3.getKey(); 
    String bucket = s3.getBucket(); 
    File tmp = new File("tmp/" + s3.getName()); 

    writeFile(key, bucket, tmp, status); //local method call I want to mock out 
}//awsFileWrite 

WRITEFILE方法は、私はモックとしたいものであると、それは私がテストしていたクラスの一部ですが、私はそれをモックする方法がわかりません。私はテストしているクラスを嘲笑して、それから私の期待に呼応することを追加すると思ったが、それでもメソッドを呼び出す。

誰でも私にここで何をすべきかアドバイスをくれますか?

EDIT:

私JMockのコードは次のようになります。

@Test 
public void testS3FileWrite() 
{  
    fileName  = context.mock(File.class); 
    s3Service = context.mock(FileDataAccessor.class); 
    s3   = context.mock(S3.class);   
    reportWriter = context.mock(ReportWriter.class); 

    try 
    { 
     context.checking(new Expectations(){{   
      oneOf(fileMetaData).getKey(); 
      will(returnValue("s3Key")); 

      oneOf(fileMetaData).getBucketName(); 
      will(returnValue("BucketName")); 

      oneOf(fileMetaData).getName(); 
      will(returnValue("TempFile")); 

      ((MethodClause) oneOf (any(File.class))).method("File").with(same("tmp/TempFile")); 

      oneOf(reportWriter).writeFile(with(same("s3Key")), 
            with(same("BucketName")), 
            with(any(File.class), 
            with(same(Status.OK))); 
     }});//Expectations 
    } 
    catch (Exception e) 
    { 
     ErrorStatus.debug("Exception in ReportTest.testS3FileWrite: " + e); 
    }//try-catch 

    ReportWriter test = new ReportWriter(status); 
    test.awsFileWrite(fileName, Status.OK); 
}//testAWSFileWrite 
+0

あなたはクラスをモックし、 'writeFile()'の期待される結果を定義するコードを投稿できますか? – jere

答えて

4

PowerMockはあなたの部分的に模擬授業することができますが、それはEasyMockないJMockのために設計されています。いずれにせよ、これは最良のアプローチではありません。

新しいクラスFileWriterを追加し、それにwriteFile方法を移動し、その後、あなたのクラスのテストの下で、1に デリゲート:テストコードで

// default implementation, can be replaced in tests 
FileWriter fileWriter = new FileWriter(); 

writeFile(key, bucket, tmp, status) { 
    fileWriter.write(key, bucket, tmp, status); 
}; 

、下のクラスでfileWriterフィールドを上書きモックFileWriterでテストする(セッターを追加するか、フィールドを保護する)。

+0

Cool :)コードをあまり分けすぎないように内部クラスとして追加しました... Cheers artbristol –

関連する問題