- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个用于 java spring 数据存储库层的单元测试类。
我有一个spring数据存储库层,其中使用@Autowired注解注入(inject)TestEntityManager类型对象(属于spring数据包)。
Autowiring 工作无需添加@RunWith(SpringRunner.class) 注释!
那么问题出在哪里呢?好吧,我认为在不向类中添加 @RunWith(SpringRunner.class) 注释的情况下,注入(inject)是不可能的:理论上,如果没有它,它应该无法工作。
这怎么可能 ?有人有答案吗?
>>>> view complete spring boot app code on github available here
import org.assertj.core.api.BDDAssertions;
import org.junit.Assert;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test ;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.Order ;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import demo.LoizBootSpringDemoApplication;
import demo.crepository.UserRepositoryInterface;
import demo.dmodel.User;
import demo.helper.helperUtils;
//Test de la couche de persistence
//@RunWith(SpringRunner.class)
@DataJpaTest
@ContextConfiguration(classes = { LoizBootSpringDemoApplication.class})
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@SuppressWarnings("unused")
public class LoizPersistenceTest
{
@Autowired
private TestEntityManager testEntityManager;
@Autowired
private UserRepositoryInterface repository;
private static Long idStub ;
@Test
@Order(1)
@Rollback(false)
@DisplayName("Test de sauvegarde d\'un user \"prenom21 Nom21\"")
public void saveShouldMapCorrectly() throws Exception {
User userStub = new User("prenom21", "Nom21");
User UserSaved = this.testEntityManager.persistFlushFind(userStub);
BDDAssertions.then(UserSaved.getId()).isNotNull();
idStub = UserSaved.getId() ;
User UserRead = this.testEntityManager.find(User.class, idStub) ;
BDDAssertions.then(UserSaved.getFirstName()).isNotBlank();
BDDAssertions.then(UserSaved.getFirstName()).isEqualToIgnoringCase("prenom21");
BDDAssertions.then(UserSaved.getLastName()).isEqualToIgnoringCase("Nom21");
BDDAssertions.then(UserSaved.getLastName()).isNotBlank();
}
@Test
@Order(2)
@DisplayName("Test d'existence du user \"prenom21 Nom21\"")
public void readShouldMapCorrectly() throws Exception {
User userStub = new User(idStub, "prenom21", "Nom21");
User userFetched = this.testEntityManager.find(User.class, idStub) ;
String sUserStub = userStub.toString() ;
String sUserFetched = userFetched.toString() ;
boolean bolSameObject = userStub.equals(userFetched) ;
boolean bolAttrEgalEgal = sUserStub == sUserFetched ;
boolean bolStringEqual = sUserStub.equals(sUserFetched) ;
boolean bBeanUtil = helperUtils.haveSamePropertyValues (User.class,userStub,userFetched) ;
Assert.assertTrue(bBeanUtil);
}
}
也许这是正常的,但我必须知道什么?
最佳答案
@RunWith(SpringRunner.class)
用于junit 4测试。
但在我们的例子中,使用的是 Junit 5。这就是我们可以在 pom.xml
上看到的内容。文件(使用 junit.jupiter
工件证明了这一点)。
所以@RunWith(SpringRunner.class)
对管理 spring 容器没有影响。
它应该被替换为 @ExtendWith(SpringExtension.class)
.
但是:@DataJpaTest
已经“包含”@ExtendWith(SpringExtension.class)
!!!
所以我们不需要添加@ExtendWith(SpringExtension.class)
当@DataJpaTest
用来。@DataJpaTest
将允许测试 spring 数据存储库层,但也将保证 spring 依赖注入(inject)。
也就是说,粗略地说,您可以使用 @Autowired
被注释的类的注释 @DataJpaTest
( Spring 数据存储库层)。
关于spring - @Autowired 不应该在没有 @RunWith(SpringRunner.class) 的情况下工作,但可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65348079/
我有一个 gradle 文件 testCompile('junit:junit') testCompile('org.powermock:powermock-core:1.6.5') testComp
我使用 @RunWith(MockitoJUnitRunner.class) 与mockito 进行 junit 测试。但现在我正在使用 spring boot 应用程序并尝试使用 @RunWith(
在通常使用 @Mock 和 @InjectMocks 注释的模拟中,被测类应该使用 @RunWith(MockitoJUnitRunner.class)。 @RunWith(MockitoJUnitR
@RunWith(MockitoJUnitRunner.class) 和 @RunWith(SpringJUnit4ClassRunner.class) 有什么区别?什么时候合适使用它? 最佳答案 M
在使用 Spring Boot 时,我总是将 @SpringBootTest 添加到我的测试类中,并且我的测试按预期工作。我想知道添加 @RunWith(SpringRunner.class) 能带来
目前我的测试类有以下内容: @RunWith(Parameterized.class) @RunWith(PowerMockRunner.class) public class TestApp ext
我的项目是用 JUnit 5 设置的,我想为我的测试使用不同的 Runner,但我什至不能使用 @RunWith 注释,因为它无法编译。在本指南中,https://www.baeldung.com/j
在不研究 JUnit 源代码本身(我的下一步)的情况下,是否有一种简单的方法可以设置每个测试使用的默认 Runner,而不必在每个测试上设置 @RunWith?我们有大量的单元测试,我希望能够全面添加
我正在从仅使用 Intellij 管理我的构建系统转向使用 Intellij/Maven。当我通过@RunWith(KmlParameterizedRunner.class) 使用我自己的运行器运行我
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 7 年前。 此问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-topic在这里
我有一个自定义测试运行程序来运行部分测试,以便我可以将测试分布在不同的 jenkins 节点上。如果运行所有集成测试,则需要一个小时。所以我有 3 台服务器运行 1/3 的测试,总共只需要 20 分钟
我有注释这些注释的类: @ContextConfiguration(locations = { "classpath:pathToXml.xml" }) @RunWith(Spring
我正在尝试让 RunWith(PowerMockRunner.class) 使用我现有的包注释。 版本: powermock 1.4.12 mockito 1.9.0 junit 4.8.2 pack
我有这个非常简单的类: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath*:/
以下 Java 类无法在我的 IDE (Intellij IDEA) 中运行。 IDE 没有给出任何原因,这使得故障排除变得痛苦和困难。 这个类看起来像这样: import cucumber.api.
这个问题在这里已经有了答案: Initialising mock objects - Mockito (8 个答案) 关闭 6 年前。 我正在使用 Junit 4.8.2。当我使用 @RunWith
我有以下测试代码: package soundSystem; import static org.junit.Assert.*; import org.junit.Test; import org.j
我正在使用 spring boot starter test 编写 JUnit 测试用例。我喜欢使用 JunitParamrunner,它有助于为参数化测试传递文件。基本上它逐行读取文件中的数据,并为
我正在处理 BDD 文件并尝试使用 JUnit 进行测试。 我想将 RunCukesTest 类与 @RunWith(Cucumber.class) 一起使用。 我在很多网站上搜索过如何安装要求,但我
这个注解有什么作用? 我想什么时候使用它? 我什么时候不想使用它? @RunWith(SpringJUnit4ClassRunner.class) 当我使用 Google 搜索时,我可以找到更多的用法
我是一名优秀的程序员,十分优秀!