- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨, friend 们,希望你们一切顺利。
所以我正在为我的简单项目编写一些简单的单元测试,我一开始运行测试,就遇到了一些问题。
首先是测试代码:
GetAllUsersServiceTest.java
package com.challenge.simpleApi.domains.users.services.getAllUsersService;
import com.challenge.simpleApi.domains.users.models.Users;
import com.challenge.simpleApi.domains.users.repositories.UsersRepository;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.boot.jdbc.EmbeddedDatabaseConnection;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.context.SpringBootTest;
@ExtendWith(MockitoExtension.class)
public class GetAllUsersServiceTest {
@Mock
private UsersRepository usersRepository;
@InjectMocks
private GetAllUsersService getAllUsersService;
private List<Users> fakeRepositoryReturn = new ArrayList<Users>();
final Users user1 = new Users(1L, "John", 28, null);
final Users user2 = new Users(2L, "Peter", 20, null);
final Users user3 = new Users(3L, "Patricia", 21, null);
@BeforeEach
void setUp() {
fakeRepositoryReturn.add(user1);
fakeRepositoryReturn.add(user2);
fakeRepositoryReturn.add(user3);
}
@Test
@DisplayName("Should be able to return all Users")
void ShouldReturnAllUsers() {
Mockito.when(usersRepository.findAll()).thenReturn(fakeRepositoryReturn);
List<Users> actual = getAllUsersService.execute();
Assertions.assertEquals(fakeRepositoryReturn, actual);
}
}
CreateUsersServiceTest.java
package com.challenge.simpleApi.domains.users.services.CreateUsersService;
import com.challenge.simpleApi.domains.users.models.Users;
import com.challenge.simpleApi.domains.users.repositories.UsersRepository;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.boot.jdbc.EmbeddedDatabaseConnection;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.web.bind.MethodArgumentNotValidException;
//@SpringBootTest
//@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
@ExtendWith(MockitoExtension.class)
public class CreateUsersServiceTest {
@Mock
private UsersRepository usersRepository;
@InjectMocks
private CreateUsersService createUsersService;
//Validator Instances - Used to validate the annotations inside the entities
private static ValidatorFactory validatorFactory;
private static Validator validator;
@BeforeEach
void setUp() {}
@BeforeAll
static void beforeAll() {
//Instantiate the validators
validatorFactory = Validation.buildDefaultValidatorFactory();
validator = validatorFactory.getValidator();
}
@AfterAll
static void afterAll() {
validatorFactory.close();
}
@Test
@DisplayName("Should be able to create a new User")
void createUserTest() {
Users userInput = new Users(null, "Jonas", 28, null);
Users expected = new Users(1L, "Jonas", 28, null);
Mockito.when(usersRepository.save(userInput)).thenReturn(expected);
Users actual = createUsersService.execute(userInput);
Assertions.assertEquals(expected, actual);
}
@Test
@DisplayName("Should not be able to create a new User without a name")
void CreateUserWithoutNameTet() {
Users userInput = new Users(null, null, 18, null);
Set<ConstraintViolation<Users>> violations = validator.validate(userInput);
List<String> errors = new ArrayList<String>();
errors =
violations.stream().map(x -> x.getMessage()).collect(Collectors.toList());
Assertions.assertEquals("Name should not be empty", errors.get(0));
}
@Test
@DisplayName("Should not be able to create a new under 18yo User")
void CreateUnder18User() {
Users userInput = new Users(null, "Paull", 17, null);
var errors = validator
.validate(userInput)
.stream()
.map(x -> x.getMessage())
.collect(Collectors.toList());
Assertions.assertEquals("Should not be less than 18", errors.get(0));
}
}
正如您所注意到的,我的单元测试不需要数据库来运行(老实说,拥有它根本没有任何意义)我什至 mock 了存储库。当我单独运行它们时,它们运行得很好
mvn test -Dtest=GetAllUsersServiceTest
mvn test -Dtest=CreateUsersServiceTest
但是,当我全部运行它们时,我的测试变得一团糟:
mvn test
看起来它正在尝试连接到数据库。老实说,我找不到如何改变这种行为。它们单独运行得很好,但是当我一次运行它们时,事情开始变得奇怪。
如果你们能帮助我理解出了什么问题,我将不胜感激
提前致谢
这是错误堆栈:
2021-01-31 14:18:45.328 INFO 17704 --- [ main] c.c.simpleApi.SimpleApiApplicationTests : Starting SimpleApiApplicationTests using Java 15.0.2 on DESKTOP-AO5BOC0 with PID 17704 (started by matt in /home/matt/Source/java/simpleApi)
2021-01-31 14:18:45.333 INFO 17704 --- [ main] c.c.simpleApi.SimpleApiApplicationTests : No active profile set, falling back to default profiles: default
2021-01-31 14:18:46.114 INFO 17704 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-01-31 14:18:46.158 INFO 17704 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 38 ms. Found 2 JPA repository interfaces.
2021-01-31 14:18:46.689 INFO 17704 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-01-31 14:18:46.724 INFO 17704 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.27.Final
2021-01-31 14:18:46.752 INFO 17704 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2021-01-31 14:18:46.827 INFO 17704 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2021-01-31 14:18:47.877 ERROR 17704 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization.
org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
[...]
at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:98) ~[postgresql-42.2.18.jar:42.2.18]
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:213) ~[postgresql-42.2.18.jar:42.2.18]
... 135 common frames omitted
2021-01-31 14:18:47.929 WARN 17704 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata
org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
[...]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
... 118 common frames omitted
2021-01-31 14:18:47.981 ERROR 17704 --- [ main] o.s.test.context.TestContextManager : Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@a6a66fac] to prepare test instance [com.challenge.simpleApi.SimpleApiApplicationTests@a25870b7]
java.lang.IllegalStateException: Failed to load ApplicationContext
[...]
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.376 s <<< FAILURE! - in com.challenge.simpleApi.SimpleApiApplicationTests
[ERROR] contextLoads Time elapsed: 0.001 s <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
[INFO]
[INFO] Results:
[INFO]
[ERROR] Errors:
[ERROR] SimpleApiApplicationTests.contextLoads » IllegalState Failed to load Applicati...
[ERROR] CreateUsersServiceTest.CreateUnder18User:71 NullPointer Cannot invoke "javax.v...
[ERROR] CreateUsersServiceTest.CreateUserWithoutNameTet:56 NullPointer Cannot invoke "...
[INFO]
[ERROR] Tests run: 5, Failures: 0, Errors: 3, Skipped: 0
[INFO]
编辑:POM.XML
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.challenge</groupId>
<artifactId>simpleApi</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>simpleApi</name>
<description>A simple api made crafted with spring</description>
<properties>
<java.version>15</java.version>
<org.mapstruct.version>1.4.1.Final</org.mapstruct.version>
<org.projectlombok.version>1.18.16</org.projectlombok.version>
<lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>15</source> <!-- depending on your project -->
<target>15</target> <!-- depending on your project -->
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>${lombok-mapstruct-binding.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project>
提前致谢! :)
最佳答案
此答案最初由@deadpool 在评论中发布。
Spring Initializr 在测试包中创建一个示例测试类。此类具有 @SpringBootTest 注释。
此注释确保在测试中加载完整的 Spring 引导环境,需要连接。
这种情况的解决方案是删除注释,或者删除 java 文件本身。
关于java - 如何在没有数据库连接的情况下在 Spring 中正确运行所有 Junit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65982124/
我知道这个问题可能已经被问过,但我检查了所有这些,我认为我的情况有所不同(请友善)。所以我有两个数据集,第一个是测试数据集,第二个是我保存在数据框中的预测(预测值,这就是没有数据列的原因)。我想合并两
在 .loc 方法的帮助下,我根据同一数据框中另一列中的值来识别 Panda 数据框中某一列中的值。 下面给出了代码片段供您引用: var1 = output_df['Player'].loc[out
当我在 Windows 中使用 WinSCP 通过 Ubuntu 连接到 VMware 时,它提示: The server rejected SFTP connection, but it lis
我正在开发一个使用 xml web 服务的 android 应用程序。在 wi-fi 网络中连接时工作正常,但在 3G 网络中连接时失败(未找到 http 404)。 这不仅仅发生在设备中。为了进行测
我有一个XIB包含我的控件的文件,加载到 Interface Builder(Snow Leopard 上的 Xcode 4.0.2)中。 文件的所有者被设置为 someClassController
我在本地计算机上管理 MySQL 数据库,并通过运行以下程序通过 C 连接到它: #include #include #include int main(int argc, char** arg
我不知道为什么每次有人访问我网站上的页面时,都会打开一个与数据库的新连接。最终我到达了大约 300 并收到错误并且页面不再加载。我认为它应该工作的方式是,我将 maxIdle 设置为 30,这意味着
希望清理 NMEA GPS 中的 .txt 文件。我当前的代码如下。 deletes = ['$GPGGA', '$GPGSA', '$GPGSV', '$PSRF156', ] searchquer
我有一个 URL、一个用户名和一个密码。我想在 C# .Net WinForms 中建立 VPN 连接。 你能告诉我从哪里开始吗?任何第三方 API? 代码示例将受到高度赞赏... 最佳答案 您可以像
有没有更好的方法将字符串 vector 转换为字符 vector ,字符串之间的终止符为零。 因此,如果我有一个包含以下字符串的 vector "test","my","string",那么我想接收一
我正在编写一个库,它不断检查 android 设备的连接,并在设备连接、断开连接或互联网连接变慢时给出回调。 https://github.com/muddassir235/connection_ch
我的操作系统:Centos 7 + CLOUDLINUX 7.7当我尝试从服务器登录Mysql时 [root@server3 ~]# Mysql -u root -h localhost -P 330
我收到错误:Puma 发现此错误:无法打开到本地主机的 TCP 连接:9200(连接被拒绝 - 连接(2)用于“本地主机”端口 9200)(Faraday::ConnectionFailed)在我的
请给我一些解决以下错误的方法。 这是一个聊天应用....代码和错误如下:: conversations_controller.rb def create if Conversation.bet
我想将两个单元格中的数据连接到一个单元格中。我还想只组合那些具有相同 ID 的单元格。 任务 ID 名称 4355.2 参与者 4355.2 领袖 4462.1 在线 4462.1 快速 4597.1
我经常需要连接 TSQL 中的字段... 使用“+”运算符时 TSQL 强制您处理的两个问题是 Data Type Precedence和 NULL 值。 使用数据类型优先级,问题是转换错误。 1)
有没有在 iPad 或 iPhone 应用程序中使用 Facebook 连接。 这个想法是登录这个应用程序,然后能够看到我的哪些 facebook 用户也在使用该应用程序及其功能。 最佳答案 是的。
我在连接或打印字符串时遇到了一个奇怪的问题。我有一个 char * ,可以将其设置为字符串文字的几个值之一。 char *myStrLiteral = NULL; ... if(blah) myS
对于以下数据 - let $x := "Yahooooo !!!! Select one number - " let $y := 1 2 3 4 5 6 7 我想得到
我正在看 UDEMY for perl 的培训视频,但是视频不清晰,看起来有错误。 培训展示了如何使用以下示例连接 2 个字符串: #!usr/bin/perl print $str = "Hi";
我是一名优秀的程序员,十分优秀!