Java 为方法编写Junits测试
我是Java新手。我想为这个方法编写junits,要测试哪些部分以获得完全覆盖Java 为方法编写Junits测试,java,unit-testing,junit,mockito,Java,Unit Testing,Junit,Mockito,我是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 m
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;
}
}
这取决于测试的类型,如果是单一测试,您可以模拟amazon客户端,并在put object方法调用后模拟正面响应,或者根据需要模拟负面响应,如果是集成,它应该有一个测试方法,该方法接收与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);
}
这是单元测试,你能告诉我如何为这个特殊的方法编写单元测试吗?检查更新,兄弟。你创建了一个AmazonS3的模拟,并注入了一个抛出异常的版本和一个没有抛出异常的版本,并检查你的方法是否正确处理了这两种情况