Java 您能模拟您所使用的类中的方法调用吗';重新测试?

Java 您能模拟您所使用的类中的方法调用吗';重新测试?,java,testing,jmock,Java,Testing,Jmock,我试图为我的代码编写JUnit测试,但是在我的一些方法中调用了其他方法。有可能模仿这些叫声吗 例如 writeFile方法是我想要模拟的,它是我正在测试的类的一部分,但我不知道如何模拟它。我原以为模拟我正在测试的类,然后将调用添加到我的期望中就可以了,但它仍然调用方法 有人能给我一些建议在这里做什么吗 编辑: 我的JMock代码如下所示: @Test public void testS3FileWrite() { fileName = context.mock(Fi

我试图为我的代码编写JUnit测试,但是在我的一些方法中调用了其他方法。有可能模仿这些叫声吗

例如

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

PowerMock允许部分模拟类,但它是为EasyMock而不是JMock设计的。无论如何,这不是最好的办法

添加一个新类
FileWriter
,并将
writeFile
方法移动到其中,然后在测试的类中, 委托给某人:

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

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

在测试代码中,使用mock
fileWriter

覆盖测试类中的
fileWriter
字段(添加setter或使字段受保护),您可以在模拟类的位置发布任何代码并定义
writeFile()的预期结果吗
?酷:)我将其添加为一个内部类,以防止代码过于分离。。。干杯,阿特布里斯托尔
// default implementation, can be replaced in tests
FileWriter fileWriter = new FileWriter();

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