【问题标题】:Writing Junits Test for a method [closed]为方法编写 Junits 测试 [关闭]
【发布时间】:2021-06-23 23:47:28
【问题描述】:

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

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;
    }
}

【问题讨论】:

  • 您创建一个 AmazonS3 模拟并注入一个抛出异常的版本和一个不抛出异常的版本,并检查您的方法是否正确处理这两种情况

标签: java unit-testing junit mockito


【解决方案1】:

这取决于测试的类型,如果它是单一的,您可以模拟亚马逊客户端并在 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);

}

【讨论】:

  • 这是单元测试,你能告诉我如何为这个特定方法编写单元测试
  • 检查更新,兄弟。
猜你喜欢
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
相关资源
最近更新 更多