为方法编写 Junits 测试

Writing Junits Test for a method

我是 Java 的新手。我想为这种方法编写junits,要测试哪些部分才能获得全面覆盖?

public class S3Client {

    private final AmazonS3 s3Client;

    @Inject @Named(S3_KIOSK_EVENT_BUCKET)
    private final String bucketName;
    public boolean save(String folderName, String filename, String messageBody) {

        try {
            s3Client.putObject(bucketName, String.format("%s/%s.json",folderName,filename), messageBody);
            log.debug("Message Published in S3 Bucket");
            return true;

        } catch (AmazonServiceException e) {
            log.error("File cannot be added. Error: "+ e);
        }
        return false;
    }
}

这取决于测试的类型,如果它是单一的,你可以模拟亚马逊客户端并在调用 put 对象方法后模拟积极响应或你想要的消极响应,如果它是集成它应该有一个测试方法,它接收与 save 方法相同的参数,并改变成功和失败的组合,请记住,覆盖范围是基于测试通过的代码扇区,其中包括 try catch

S3Client subject;

AmazonS3 s3Client;

@BeforeAll
static void setup(){
    s3Client = mockito.mock(AmazonS3.class);
    subject = new S3Client(s3Client);
}

@Test
public void saveObjectInS3Test(){

    //We simulate that everithing is ok 
    when(s3Client.putObject(mockito.isAny(),mockito.isAny(),mockito.isAny())).thenReturns(new PutObjectResult())
    assertEqual(subject.save("fooForlderName","fooFileName","fooMessageBody"),true);

    //Then we can simulate an exception
    when(s3Client.putObject(mockito.isAny(),mockito.isAny(),mockito.isAny())).thenThrow(AmazonServiceException.class);
    assertEqual(subject.save("fooForlderName","fooFileName","fooMessageBody"),false);

}