小编jav*_*900的帖子

Junit 5 与 Spring Boot:何时使用 @ExtendWith Spring 或 Mockito?

我有以下抽象单元测试类,我的所有具体单元测试类都扩展了它:

@ExtendWith(SpringExtension.class)
//@ExtendWith(MockitoExtension.class)
@SpringBootTest(
    classes = PokerApplication.class,
    webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
public abstract class AbstractUnitTests {

    @MockBean
    public RoundService roundService;

    @MockBean
    public RoundRepository roundRepository;
}
Run Code Online (Sandbox Code Playgroud)

@ExtendWith(SpringExtension.class)使用or 和有什么不一样@ExtendWith(MockitoExtension.class)

我问,使用任何一个注释似乎都没有什么区别,并且两者在我的代码中分别工作 - 允许我使用 Junit5。那么为什么两者都有效呢?

具体测试类:

    @DisplayName("Test RoundService")
    public class RoundsServiceTest extends AbstractUnitTests {

        private static String STUB_USER_ID = "user3";

        // class under test
        @InjectMocks
        RoundService roundService;

        private Round round;

        private ObjectId objectId;

        @BeforeEach //note this replaces the junit 4 @Before
        public void setUp() {

            initMocks(this);
            round = Mocks.round(); …
Run Code Online (Sandbox Code Playgroud)

java spring mockito junit5

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

如何在 Spring Boot 单元测试中模拟 JWT 身份验证?

我已经按照这个例子在我的 Spring Boot REST API 中添加了JWT身份验证。Auth0

现在,正如预期的那样,我以前工作的Controller单元测试给出了响应代码401 Unauthorized而不是200 OK因为我没有在测试中通过任何 JWT。

如何模拟JWT/AuthenticationREST 控制器测试的一部分?

单元测试类:

    @AutoConfigureMockMvc
    public class UserRoundsControllerTest extends AbstractUnitTests {

        private static String STUB_USER_ID = "user3";
        private static String STUB_ROUND_ID = "7e3b270222252b2dadd547fb";

        @Autowired
        private MockMvc mockMvc;

        private Round round;

        private ObjectId objectId;

        @BeforeEach
        public void setUp() {
            initMocks(this);
            round = Mocks.roundOne();
            objectId = Mocks.objectId();
        }

        @Test
        public void shouldGetAllRoundsByUserId() throws Exception {

            // setup
            given(userRoundService.getAllRoundsByUserId(STUB_USER_ID)).willReturn(Collections.singletonList(round));

            // mock …
Run Code Online (Sandbox Code Playgroud)

java spring unit-testing jwt spring-boot

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

Gradle 和 Docker:如何在 Docker 容器中运行 Gradle 构建?

我有以下运行的 docker 文件spring boot application

# For Java 11, try this
FROM adoptopenjdk/openjdk11:alpine-jre

#
ARG JAR_FILE=/build/libs/pokerstats-0.0.1-SNAPSHOT.jar

#
WORKDIR /opt/app

#
COPY ${JAR_FILE} app.jar

#
ENTRYPOINT ["java","-jar","app.jar"]
Run Code Online (Sandbox Code Playgroud)

问题是目前我必须首先gradle clean build在我的主机上运行才能在我的本地机器上的路径上创建 jar 文件:

/build/libs/pokerstats-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)

如何将其gradle clean build放入我的 docker 文件中,以便在容器完成构建步骤?

编辑:

我希望用户的步骤是:

  1. 从克隆我的项目 github
  2. 运行docker build -t pokerstats .- 这将进行 gradle 构建
  3. 运行 docker 容器运行 -d -p 8080:8080 pokerstats

用户将从 github 克隆我的项目 - 然后我希望他们能够运行 docker 容器,而不必先用 gradle 构建项目 - 即我希望 docker 文件进行构建并将 jar …

java jar gradle docker

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

AWS SQS FIFO 队列:队列应该启用 ContentBasedDeduplication 还是明确提供 MessageDeduplicationId?

当我尝试向我的FIFO SQSusing添加一条消息时,我AWS CLI得到:

An error occurred (InvalidParameterValue) when calling the SendMessage operation: The queue should either have ContentBasedDeduplication enabled or MessageDeduplicationId provided explicitly
Run Code Online (Sandbox Code Playgroud)

我的请求:

C:\Windows\system32>aws sqs send-message --queue-url https://sqs.us-east-1.amazonaws.com/307125934878/myqueue.fifo --message-body "hello world" --region us-east-1 --message-group-id 3
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

queue fifo amazon-sqs amazon-web-services aws-cli

6
推荐指数
1
解决办法
4559
查看次数

多模块 Maven 项目和 Docker:找不到工件?

我有以下多阶段dockerfile尝试复制我的多模块java maven项目的每个模块并ear使用mvn clean install.

码头档案:

# Copy files from local to maven image and build ear
FROM maven:3.5-jdk-8 AS build  
COPY module1 /usr/src/app/src  
COPY module2 /usr/src/app/src  
COPY module3 /usr/src/app/src  
COPY pom.xml /usr/src/app  
RUN mvn -f /usr/src/app/pom.xml clean install

# Create server image + rest of docker file (working ok)
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

Step 8/20 : RUN mvn -f /usr/src/app/pom.xml clean install
 ---> Running in cf9d8c1ef9ed
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were …
Run Code Online (Sandbox Code Playgroud)

java dependencies pom.xml maven docker

6
推荐指数
1
解决办法
690
查看次数

Docker:启动后保持 Ubuntu 容器运行?

我正在尝试开始docker container使用ubuntu图像:

docker container run -d --name ubuntu_assignment_4 6e4f1fe62
Run Code Online (Sandbox Code Playgroud)

但是,一旦我启动容器,它就会再次停止。

为什么会发生这种情况以及如何确保容器保持运行?

我试图在这里运行的图像是:ubuntu:14.04

containers docker ubuntu-14.04 docker-image

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

如何在单元测试中模拟 AmazonSQS 而不调用 SQS?

我的Java班级中有以下方法:

public class AwsHelper {

  private AmazonSQS sqs;

  private void sendMessageToQueue(String message){

        sqs = AmazonSQSClientBuilder.defaultClient();

        SendMessageRequest sendMessageRequest = new SendMessageRequest();
        sendMessageRequest.setQueueUrl("");
        sendMessageRequest.setMessageBody(message);
        sendMessageRequest.setMessageGroupId("");

        sqs.sendMessage(sendMessageRequest);
}
Run Code Online (Sandbox Code Playgroud)

我希望能够模拟 的行为,sqs.sendMessage(sendMessageRequest);以便我的单元测试不会将消息发送到队列。

我在我的测试类中尝试这样做,但sqs实际上在我的测试执行时向队列发送了一条消息。假设这是由于被分配了AmazonSQSClientBuilder.defaultClient()

我该如何解决这个问题?

public class AwsSQSReferralsUtilTest {
    
        @Spy
        @InjectMocks
        private AwsHelper awsHelper;
    
        @Mock
        AmazonSQS sqs;
    
        @BeforeClass
        public void setUp() {
            MockitoAnnotations.initMocks(this);
        }
    
        @AfterMethod
        public void afterEachMethod() {
            Mockito.reset(awsHelper);
        }
    
        @Test
        public void shouldSendMessage() {
    
            Mockito.when((sqs.sendMessage(any(SendMessageRequest.class)))).thenReturn(new SendMessageResult());
    
            awsHelper.sendMessageToQueue("");
        }
}
Run Code Online (Sandbox Code Playgroud)

java testng mockito amazon-sqs amazon-web-services

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

Java - ZonedDateTime 没有正确转换为 Date 对象?

我有以下 Java 代码:

Date convertedDate = Date.from(zonedDateTime.toInstant());
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是convertedDate与 zonedDateTime 对象相比不正确。

例如,当我有一个 zonedDateTime 对象时:

2021-09-16T12:00
Run Code Online (Sandbox Code Playgroud)

带区域:

Africa/Abidjan
Run Code Online (Sandbox Code Playgroud)

上面的代码将其转换为:

Thu Sep 16 13:00:00 BST 2021
Run Code Online (Sandbox Code Playgroud)

我在这里期待的是

 Thu Sep 16 10:00:00 BST 2021
Run Code Online (Sandbox Code Playgroud)

由于Africa/Abidjan时区比 BST 早 2 小时。

我该如何解决这个问题?

java time date java-8 zoneddatetime

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

Docker 和 mvn build - 无法通过单元测试,因为 DB 需要另一个容器运行?

我有一个带有以下 docker 文件的标准 Spring Boot 应用程序:

FROM maven:latest AS maven

WORKDIR /usr/src/app
COPY . /usr/src/app
# Compile and package the application to an executable JAR
RUN mvn package

FROM amazoncorretto:17-alpine-jdk

ARG JAR_FILE=app.jar

WORKDIR /opt/app

# Copy the jar from the maven stage to the /opt/app directory of the current stage.
COPY --from=maven /usr/src/app/target/${JAR_FILE} /opt/app/

EXPOSE 8080

ENTRYPOINT ["java","-jar","app.jar"]
Run Code Online (Sandbox Code Playgroud)

我的application.properties文件具有与在 docker 容器中运行的 postgres 数据库的连接 spring:

# datasource
spring.datasource.url=jdbc:postgresql://db:5432/myApp?currentSchema=gpclinic&createDatabaseIfNotExist=true
spring.datasource.username=uname
spring.datasource.password=pword
Run Code Online (Sandbox Code Playgroud)

当我跑步时:

docker build -t myApp .
Run Code Online (Sandbox Code Playgroud)

由于数据库容器未运行,单元测试失败,因此我遇到了失败。

我需要运行 Postgres …

java postgresql spring docker docker-compose

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

构造函数的参数需要一个无法找到的类型的 bean?

我有以下Spring 存储库

import com.azure.spring.data.cosmos.repository.CosmosRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface PersonRepository extends CosmosRepository<Person, String> {}
Run Code Online (Sandbox Code Playgroud)

它在我的服务类的构造函数中引用:

private final PersonRepository personRepository ;

@Autowired
    public PersonService(
            PersonRepository personRepository) {
        this.personRepository= personRepository;
    }
Run Code Online (Sandbox Code Playgroud)

我在我的pom中添加了这个依赖项:

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-spring-data-cosmos</artifactId>
  <version>3.34.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这是我的应用程序入门课程:

@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@EnableSwagger2
@ConfigurationPropertiesScan("com.example.person")
public class PersonApplication extends SpringBootServletInitializer {
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

Parameter 3 of constructor in PersonService required a bean of type 'PersonRepository' that could not be found.
    
Action:
Consider defining a bean of type 'PersonRepository' …
Run Code Online (Sandbox Code Playgroud)

java spring maven spring-data azure-cosmosdb

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