我想为我的代码编写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的方法就是我要嘲笑什么,它是我测试类的一部分,但我不知道如何嘲笑它。我以为嘲笑我正在测试的课程,然后将这个调用添加到我的期望中就可以做到,但仍然会调用该方法。
任何人都可以给我一些建议,请在这里做什么?
编辑:
我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
你可以发布任何你模拟类的代码,并定义'writeFile()'的预期结果吗? – jere 2012-01-11 11:55:41