小编Gav*_*avi的帖子

如何使用 Java 对 AWS S3 SDK 的 getObject 方法进行单元测试?

我正在使用 Java,并使用 AWS SDK 与 S3 进行交互。我有以下方法,我想对其进行单元测试

private final S3Client s3Client;
...
...
public byte[] download(String key) throws IOException {
    GetObjectRequest getObjectRequest = GetObjectRequest.builder()
            .bucket("myBucket")
            .key(key)
            .build();
    return s3Client.getObject(getObjectRequest).readAllBytes();
}
Run Code Online (Sandbox Code Playgroud)

为此,我使用 JUnit 5 和 Mockito。问题是我不知道如何模拟结果

s3Client.getObject(getObjectRequest) 
Run Code Online (Sandbox Code Playgroud)

因为返回类型

ResponseInputStream<GetObjectResponse> 
Run Code Online (Sandbox Code Playgroud)

是最后一堂课。

有什么想法或建议吗?谢谢

java junit mockito aws-sdk

9
推荐指数
2
解决办法
2万
查看次数

Angular ControlValueAccessor 和 markAsTouched

我将 angular 9 与 Angular Material 一起使用,并且通过实现 ControlValueAccessor 接口有一个自定义控件。一切正常。

当表单无效时,在我所有的提交按钮中,我调用 formGroup.markAllAsTouched 因为所有的角度材料字段都变为红色。通过这种方式,用户可以更好地了解哪些控件无效。

我需要用我的自定义控件实现相同的行为。怎么做?

我创建了一个 stackblitz 项目,以便更好地了解这里的情况

angular-material angular angular-forms

6
推荐指数
2
解决办法
2597
查看次数

无法使用Logback记录未捕获的异常

我用各种框架(jsf,Spring,Hibernate)编写了一个web应用程序,我的logger库是Logback和slf4j.

目前我无法在日志文件中显示未捕获的异常(例如NullPointers).

这是我的logBack.xml

<configuration debug="true">
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${CATALINA_HOME}/logs/jsfDemo.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>jsfDemo.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender> 

    <root level="DEBUG">         
        <appender-ref ref="FILE" />
    </root> 

</configuration>
Run Code Online (Sandbox Code Playgroud)

当我用uc = null执行这几行代码时

public void nullPointerMethod(UserCredential uc){
        LOG.debug(">>login(uc)");

        if(uc == null){
            throw new NullPointerException();
        }else{
            //do something
        }

        LOG.debug("<<login(uc)");
    }
Run Code Online (Sandbox Code Playgroud)

在logFile我只看到

>>login(uc)
Run Code Online (Sandbox Code Playgroud)

但是我想看看NullPointer的stackTrace.怎么了?

logback uncaught-exception

5
推荐指数
1
解决办法
4939
查看次数

<a jsf:rendered="#{...}">不会被解释为passthrough元素

我不明白为什么这段代码工作正常:

<h:link value="Login" rendered="#{sessionBean.userInSessionBean == null}"  />
Run Code Online (Sandbox Code Playgroud)

而这段代码不起作用:

<a jsf:rendered="#{sessionBean.userInSessionBean == null}">Login</a>
Run Code Online (Sandbox Code Playgroud)

jsf rendered-attribute jsf-2.2 passthrough-elements

4
推荐指数
1
解决办法
337
查看次数

基于复合组件中的动态列表渲染多个 &lt;option&gt; 元素

我正在使用 JSF 2.2 和 Prime Faces 5.3。

我正在尝试创建一个具有动态选项的 html5 组件。目标是创建类似于 f:selectItems 标记的内容

目前我有以下用于 datalist 标签的代码(datalist.xhtml 文件)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns:cc="http://xmlns.jcp.org/jsf/composite">

<cc:interface></cc:interface>

<cc:implementation>
    <datalist id="#{cc.attrs.id}">
        <cc:insertChildren/>
    </datalist>
</cc:implementation>

</html>
Run Code Online (Sandbox Code Playgroud)

以及单个选项的以下内容(option.xhtml 文件)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns:cc="http://xmlns.jcp.org/jsf/composite">

<cc:interface>
    <cc:attribute name="value" type="java.lang.String" default=""/>
    <cc:attribute name="label" type="java.lang.String" default=""/>
</cc:interface>

<cc:implementation>
    <option value="#{cc.attrs.value}" label="#{cc.attrs.label}"/>
</cc:implementation>

</html>
Run Code Online (Sandbox Code Playgroud)

通过这种方法我可以创建这样的东西

<myTag:dataList id="test">
    <myTag:option value="1" label="label1"/>
    <myTag:option value="2" label="label2"/>
    <myTag:option value="3" label="label3"/>
</myTag:dataList>
Run Code Online (Sandbox Code Playgroud)

但我需要一些能让我拥有动态选项列表的东西。我希望编写以下代码(或类似的代码)

<myTag:dataList id="test">
    <myTag:options value="#{myBean.myCollection}" var="mySingleObj" itemValue="mySingleObj.value" itemLabel="mySingleObj.label"/>
</myTag:dataList>
Run Code Online (Sandbox Code Playgroud)

jsf composite-component html-datalist

3
推荐指数
1
解决办法
892
查看次数

如何测试 Spring 事务

我正在使用 Spring Boot 2.1.0 处理一个项目,我遇到了以下情况。

我有以下存储库

@Repository
public interface ActivityRepository extends PagingAndSortingRepository<Activity, Long> {

    @Transactional
    @Modifying
    @Query("") // Imagine a query
    void updateBacklogStatusAge();

    @Transactional
    @Modifying
    @Query("QUERY 2") // Imagine a query
    void updateNextStatusAge();

    @Transactional
    @Modifying
    @Query("QUERY 3") // Imagine a query
    void updateInProgressStatusAge();
}
Run Code Online (Sandbox Code Playgroud)

和以下组件

@Component
public class ColumnAgeJob {

    private final ActivityRepository activityRepository;

    public ColumnAgeJob(final ActivityRepository pActivityRepository) {
        activityRepository = pActivityRepository;
    }

    @Transactional
    public void update() {
        activityRepository.updateBacklogStatusAge();
        activityRepository.updateNextStatusAge();
        activityRepository.updateInProgressStatusAge();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想测试事务注释是否有效。

基本上我的目标是检查在 updateInProgressStatusAge() 调用期间引发的 runtimeException 是否会导致 updateNextStatusAge …

spring spring-transactions spring-data spring-data-jpa spring-boot

3
推荐指数
1
解决办法
3910
查看次数