Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Junit Mockito不抛出异常_Junit_Mockito - Fatal编程技术网

Junit Mockito不抛出异常

Junit Mockito不抛出异常,junit,mockito,Junit,Mockito,我有这个方法我的存储库方法抛出RepositoryException和服务方法抛出service exception我在模拟存储库并抛出repository exception但它没有抛出任何异常任何人能解释一下这里发生了什么吗 public class IndActivityTest { static BigDecimal offset; static SecurityContext userContext; SearchFilter filter = new Sear

我有这个方法我的存储库方法抛出RepositoryException和服务方法抛出service exception我在模拟存储库并抛出repository exception但它没有抛出任何异常任何人能解释一下这里发生了什么吗

public class IndActivityTest {
    static BigDecimal offset;
    static SecurityContext userContext;
    SearchFilter filter = new SearchFilter();
    SearchFilterToDB filterToDB = new SearchFilterToDB();
    static BigDecimal limit;
    static User user = null;
    @Mock
    static UserRepository repository;
    @Mock
    static SearchRepository searchRepository;

    @InjectMocks
    static SearchApiServiceImpl  searchApiImple;

    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }
    @BeforeClass
    public static void setUp(){
        user = new User();
        String scheme="https";
        userContext = new ServiceSecurityContext(user, scheme);
    }
    @Test
    public void getIndActivitiesPositiveResponse() throws RepositoryException,ServiceException{
        List<IndActivityDetailEntity> activityDetailEntities = new ArrayList<>();
        when(searchRepository.getIndActivitiesFromDB(filterToDB,user)).thenReturn(activityDetailEntities);
        Response response = searchApiImple.getIndActivities(filter, userContext);
        assertEquals(response.getStatus(), 200);
    }
    @Test(expected=ServiceException.class)
    public void getIndActivitiesNegetiveResponse() throws RepositoryException,ServiceException{
        when(searchRepository.getIndActivitiesFromDB(filterToDB,user)).thenThrow(new RepositoryException());
        searchApiImple.getIndActivities(filter, userContext);
    }
}

public Response getIndActivities(SearchFilter searchFilter, SecurityContext securityContext)
        throws ServiceException {
    List<Activity> activities = new ArrayList<>();
    try {
        logger.info("Entering getActivities");
        List<IndActivityDetailEntity> activityDetailEntities = new ArrayList<>();
        User user = (User) securityContext.getUserPrincipal();
        SearchFilterToDB searchFilterToDB = newFilterToDB(searchFilter, user);
        activityDetailEntities = searchRepository.getIndActivitiesFromDB(searchFilterToDB, user);
        if (!activityDetailEntities.isEmpty())
            activities = SearchUtil.convertIndActivityToIndActivityDTO(activityDetailEntities, searchRepository);
        logger.info(" Exiting getActivities");
    } catch(Exception e){
        handleException(e);
    }
    return Response.status(200).entity(new InlineResponse200().data(activities)).build();
}


private void handleException(Exception e) throws ServiceException{
    logger.error("Service Exception "+e);
    if( e instanceof ServiceException)
        throw (ServiceException)e;
    if( e instanceof RepositoryException ){
        RepositoryException re = (RepositoryException)e;
        throw new ServiceException(re.getErrorCode(),re,re.getMessage());
    }else{
        throw new ServiceException(e.getMessage(), e,ServiceConstant.UNKNOWN);
    }
}
公共类IndActivityTest{
静态双十进制偏移量;
静态SecurityContext用户上下文;
SearchFilter=newsearchfilter();
SearchFilterToDB filterToDB=新的SearchFilterToDB();
静态大十进制极限;
静态用户=null;
@嘲弄
静态用户存储库;
@嘲弄
静态搜索存储库搜索存储库;
@注射模拟
静态SearchApiServiceImpl searchApiImple;
@以前
公共void init(){
initMocks(this);
}
@课前
公共静态无效设置(){
user=新用户();
字符串scheme=“https”;
userContext=新的ServiceSecurityContext(用户、方案);
}
@试验
public void GetIndActivities PositiveResponse()引发RepositoryException、ServiceException{
List activityDetailEntities=new ArrayList();
当(searchRepository.getIndActivitiesFromDB(filterToDB,user))。然后返回(activityDetailEntities);
Response-Response=searchapimple.getIndActivities(过滤器、用户上下文);
assertEquals(response.getStatus(),200);
}
@测试(预期=ServiceException.class)
public void GetIndActivities NegativeResponse()引发RepositoryException、ServiceException{
当(searchRepository.getIndActivitiesFromDB(filterToDB,user)).thenThrow(new RepositoryException());
searchapimple.getIndActivities(过滤器、用户上下文);
}
}
公共响应getIndActivities(SearchFilter SearchFilter、SecurityContext SecurityContext)
抛出ServiceException{
列表活动=新建ArrayList();
试一试{
logger.info(“输入getActivities”);
List activityDetailEntities=new ArrayList();
User=(User)securityContext.getUserPrincipal();
SearchFilterToDB SearchFilterToDB=newFilterToDB(searchFilter,用户);
activityDetailEntities=searchRepository.getIndActivitiesFromDB(searchFilterToDB,用户);
如果(!activityDetailEntities.isEmpty())
activities=SearchUtil.convertinactivitytoindactivitydto(activityDetailEntities,searchRepository);
logger.info(“退出getActivities”);
}捕获(例外e){
手部异常(e);
}
返回Response.status(200).entity(新的InlineResponse200().data(activities)).build();
}
私有void handleException(异常e)引发ServiceException{
记录器错误(“服务异常”+e);
如果(例如ServiceException实例)
抛出(ServiceException)e;
if(e RepositoryException实例){
RepositoryException re=(RepositoryException)e;
抛出新的ServiceException(re.getErrorCode(),re,re.getMessage());
}否则{
抛出新的ServiceException(e.getMessage(),e,ServiceConstant.UNKNOWN);
}
}

问题在于服务的
getIndActivities()
方法中的
new FilterToDB(searchFilter,user)
行,因为
searchFilterToDB
对象不同,所以方法调用实际上不会被模拟


所以要解决这个问题,,您需要将
new
FilterToDB
对象创建提取到一个单独的类中,并模拟对该类的方法调用。

我已经多次使用过这种类型的代码,但仅在这段代码中,我无法引发任何异常。您能在存储库类中发布相关方法并在何处设置模拟吗?我已经编辑了我的questionRepository我无法在此处显示您是否也可以添加服务方法的代码?ServiceException由服务方法引发,因此当存储库引发某些存储库异常时,服务将捕获该异常并引发服务异常。