我有以下抽象单元测试类,我的所有具体单元测试类都扩展了它:
@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) 我已经按照这个例子在我的 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) 我有以下运行的 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 文件中,以便在容器内完成构建步骤?
编辑:
我希望用户的步骤是:
githubdocker build -t pokerstats .- 这将进行 gradle 构建用户将从 github 克隆我的项目 - 然后我希望他们能够运行 docker 容器,而不必先用 gradle 构建项目 - 即我希望 docker 文件进行构建并将 jar …
当我尝试向我的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)
我该如何解决这个问题?
我有以下多阶段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) 我正在尝试开始docker container使用ubuntu图像:
docker container run -d --name ubuntu_assignment_4 6e4f1fe62
Run Code Online (Sandbox Code Playgroud)
但是,一旦我启动容器,它就会再次停止。
为什么会发生这种情况以及如何确保容器保持运行?
我试图在这里运行的图像是:ubuntu:14.04
我的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 代码:
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 小时。
我该如何解决这个问题?
我有一个带有以下 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 …
我有以下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 ×8
docker ×4
spring ×4
amazon-sqs ×2
maven ×2
mockito ×2
aws-cli ×1
containers ×1
date ×1
dependencies ×1
docker-image ×1
fifo ×1
gradle ×1
jar ×1
java-8 ×1
junit5 ×1
jwt ×1
pom.xml ×1
postgresql ×1
queue ×1
spring-boot ×1
spring-data ×1
testng ×1
time ×1
ubuntu-14.04 ×1
unit-testing ×1