下面是java spring数据存储库层的单元测试类。我有一个spring数据存储库层,其中注释@Autowired用于注入TestEntityManager类型的对象(属于spring数据包)。自动连线在不添加@RunWith(SpringRunner.class)注释的情况下工作!那么问题是什么呢?嗯,我认为在没有向类添加@RunWith(SpringRunner.class)注释的情况下,注入是不可能的:从理论上讲,没有它,注入就不可能工作。怎么可能呢?有人有什么答案吗?
其他人遇到了相反的问题:请参见此处的链接
以下是我奇怪的代码组,其工作原理令人惊讶:
包装组织。洛伊斯。演示;
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);
}
}
也许这很正常,但我必须知道什么?请给我一些答案,我将不胜感激:)
从导入<代码>junit。jupiter我可以看到您正在使用junit-5,而RunWith属于junit-4,作为参考,junit-5测试不强制使用ExtendWith,如果您想使用特定的运行程序,您仍然需要ExtendWith,但由于ExtendWith本身是用ExtendWith注释的,因此无需明确执行此操作
在JUnit 5中,RunWith注释已被更强大的ExtendWith注释所取代。
要使用此类,只需使用@RunAnd(SpringJUnit4ClassRunner.class)
或@RunAnd(SpringRunner.class)
注释基于JUnit 4的测试类。
@RunAnd(SpringRunner.class)
用于jUnit 4测试。但在我们的例子中,使用的是JUnit 5。这就是我们可以在pom.xml
文件中看到的内容(使用junit.jupiter
工件证明了这一点)。所以@RunAnd(SpringRunner.class)
对管理Spring容器没有影响。它应该替换为@ExantAnd(SpringExtension.class)
。
然而:
@DataJpaTest已经“包含”
<代码>@DataJpaTest将允许测试spring数据存储库层,但也将保证spring依赖注入。也就是说,粗略地说,您可以对已注释的类(spring数据存储库层)使用Autowired注释。@extendedwith(SpringExtension.class)
!!!因此,当使用DataJpaTest时,我们不需要添加ExtendWith(SpringExtension.class)
这个问题的上下文是在sping-boot中,使用sping-data-jpa和hibernate。 一个同事写了一个,并用注释了service方法。服务方法加载一个实体,然后命中一个一对多延迟加载的集合(
问题内容: 我正在学习d3。有某些方法可以在d3 js 中加载数据。但是他们似乎都进行了HTTP GET。在我的场景中,我已经在字符串中包含了json数据。如何使用此字符串代替发出另一个http请求?我试图为此寻找文档,但没有找到。 这有效: 现在,如果我有: 如何在d3中使用已计算的“ myjson”并避免对服务器的异步调用?谢谢。 问题答案: 只需将通话替换为 IE浏览器: 更新09/2013
我正在使用Transform创建一个windows安装包,使其成为多实例。我的mst文件更新了某些注册表项组件的产品代码和GUID。这是每台机器安装。现在我无法卸载我的产品,如果: 我的mst文件从其原始位置删除 TransformsSecure策略设置为1 安装程序尝试在原始位置查找mst文件,但无法执行此操作,卸载失败。在这两种情况下,我可以做什么让我的产品卸载? 一些额外信息。我看到我的ms
我是UI自动测试的新手,当只有.apk文件时,我无法弄清楚如何设置UI测试。 在线教程和其他示例没有显示如何使用我的3P. apk文件。我知道在Appium中,只需将文件/目录和名称添加到所需的功能,服务器就会安装它。
我已经安装了Android SDK最新版本和Eclipse。但我也想试试Android Studio。 我看过这个和这个帖子,但是那些解决方案改变了Android Studio(一旦下载并安装)使用的SDK实例。我想要的不是下载另一个SDK,当我已经在我的机器上安装了它。
问题内容: 有什么方法可以在不直接使用Spring Context的情况下加载带有标记的类?基本上,我想重用Spring所做的所有智能逻辑,但是对于在bean生命周期之外手动实例化的bean。 我有一个可以在Spring(引导)中愉快地加载的bean,可以将其注入到其他Service bean中: 详情参见春天docco http://docs.spring.io/spring-boot/docs