当前位置: 首页 > 知识库问答 >
问题:

JUnit用于try和catch块覆盖

东方飞捷
2023-03-14

我试图为下面的代码编写一个JUnit,但我不知道如何覆盖用catch block语句编写的代码。请任何人为下面的代码编写一个示例JUnit。

这里我不想讨论任何异常,而是想讨论使用Mockito在catch块中编写的代码行。

public Product getProductLookUpData() {

        Product product = null;
        try{
            // Try to get value from cacheable method
            product = productCacheDao.getProductLookUpData();
            .....//statements
        } catch (Exception ex) {
            // getting value from db
            product = productDao.getIpacMetricCodeLookUpData();
            ....//statements
        }

        return product;
    }

共有1个答案

楚洋
2023-03-14

您可以模拟productcachedaoproductdao并检查在测试用例中调用这些方法的次数。您可以使用这些模拟对象模拟异常抛出,如下所示:

when(mockObject.method(any())).thenThrow(new IllegalStateException());

所以,对于你的情况,我会做这样的事情:

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import static org.mockito.Mockito.*;

public class ProductTest {
    private static final Product CACHED_PRODUCT = new Product("some parameters for cached product");
    private static final Product DB_PRODUCT = new Product("some parameters for DB product");

    private ProductService service;
    private ProductDao productDaoMock;
    private ProductCacheDao productCacheDaoMock;

    @Before
    public void setup() {
        service = new ProductService();
        productDaoMock = mock(ProdoctDao.class);
        service.setProductDao(productDaoMock);

        productCacheDaoMock = mock(ProdoctCacheDao.class);
        service.setProductCacheDao(productCacheDaoMock);
    }

    @Test
    public void testCache() {
        when(productCacheDaoMock.getProductLookUpData(any())).thenReturn(CACHED_PRODUCT);

        final Product product = service.getProductLookUpData();

        Assert.assertEquals(CACHED_PRODUCT, product);
        verify(productCacheDaoMock, times(1)).getProductLookUpData(any());
        verify(productDaoMock, never()).getIpacMetricCodeLookUpData(any());
    }

    @Test
    public void testDB() {
        when(productCacheDaoMock.getProductLookUpData(any())).thenThrow(new IllegalStateException());
        when(productDaoMock.getIpacMetricCodeLookUpData(any())).thenReturn(DB_PRODUCT);

        final Product product = service.getProductLookUpData();

        Assert.assertEquals(DB_PRODUCT, product);
        verify(productCacheDaoMock, times(1)).getProductLookUpData(any());
        verify(productDaoMock, times(1)).getIpacMetricCodeLookUpData(any());
    }
}
 类似资料:
  • 问题内容: 我最初从大学开始编程,然后学习了vb.net。现在,我决定转向Java并进行一些查询。在vb中,try catch语句的布局如下 但是在Java网站(https://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html)中,我发现在Java中,您使用了两个陷阱,如下所示: 我希望有人能够解释为什么

  • 问题内容: 好的,这可能是一个非常愚蠢的问题,但是我发现关于此的PHP文档以及一些Internet搜索并没有使我对此有所任何了解。 什么时候应该使用try-catch块来改进我的应用程序? 我读过有人说我们应该仅使用try- catch块来防止致命错误。我读过别人的话说,我们应该只在意外错误上使用它(等什么?意外?如果它们是意外错误,如何使用try- catch防止它们出现?我应该将所有应用程序代

  • 问题内容: 我正在审查一些新代码。该程序仅具有try和finally块。由于不包含catch块,如果try块遇到异常或任何可抛出的异常,它将如何工作?它是否直接进入了finally块? 问题答案: 如果try块中的任何代码都可以引发已检查的异常,则它必须出现在方法签名的throws子句中。如果引发了未经检查的异常,则该异常会冒泡退出方法。 无论是否引发异常,都始终执行finally块。

  • 我正在使用Slim来编写REST API,我遇到了一种情况,我需要检查用户输入的日期时间是否有效,从而提出了此代码 当我输入有效的日期时间字符串时,它可以正常工作,例如,但如果只是出于测试目的,我输入一些随机字符串,它会给出500个内部错误,而不是给我任何异常。 为什么它忽略try catch块??? 错误信息 PHP 致命错误: 调用非对象上的成员函数格式 ()

  • 我有一个包含两个方法的类,每个方法都有一个try-catch块来查找任何异常。 代码如下: 我提出了一个测试用例,使用Mokito来测试上述场景,但不知道如何进入上述的catch块 我试图提出一个NullPointerException,但catch块仍然没有出现在CodeOverage中(我假设它没有经过测试)。请帮我写一个Junit测试用例来输入异常。我对所有这些话题都很陌生。