我为下面的方法创建了一个模拟 junit 测试用例
方法:
@覆盖
公共列表检索ListByUserId(用户用户){
Session session = this.sessionFactory.getCurrentSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<CredentialDocments> criteria = builder.createQuery(CredentialDocments.class);
Root<CredentialDocments> credentialRoot = criteria.from(CredentialDocments.class);
criteria.select(credentialRoot).where(builder.equal(credentialRoot.get(USERS), users)).distinct(true);
criteria.orderBy(builder.desc(credentialRoot.get(PropertyConstant.UPLOADED_TS)));
return session.createQuery(criteria).getResultList();
}
测试用例:
包com . XYZ . Dao . test;
导入静态org.mockito.mockito.when;
进口java.util.ArrayList;进口java.util.List;
进口javax.persistence.criteria.CriteriaBuilder;
导入javax . persistence . criteria . criteria query;
导入javax . persistence . criteria . path;
进口javax.persistence.criteria.Root;
导入组织hibernate.Session;
进口org.hibernate.SessionFactory;
导入组织junit.Before;
导入组织junit.Test;
进口org.junit.jupiter.api.Assertions;
导入组织 junit.runner.RunWith;
进口org.mockito.InjectMocks;
进口org.mockito.Mock;
导入org . spring framework . test . context . JUnit 4 . spring runner;
@运行方式(SpringRunner.class)
公共类CredentialDocTest {
@InjectMocks
CredentialDocDAO credentialDocDAO = new CredentialDocDAOImpl();
@Mock
SessionFactory sessionFactory;
@Mock
Session session;
@Mock
CriteriaBuilder builder;
@Mock
CriteriaQuery<CredentialDocments> criteria;
@Mock
Root<CredentialDocments> credentialRoot;
@Mock
Path<Object> path;
private CredentialDocments credentialDocument;
private List<CredentialDocments> credentialDocumentList;
@Before
public void setUp() throws Exception {
credentialDocument = new CredentialDocments();
credentialDocumentList = new ArrayList<>();
credentialDocument.setDocId(1);
credentialDocument.setDocNm("Doc1");
Users users = new Users();
users.setUserId("jscrotestpi");
credentialDocument.setUsers(users);
credentialDocumentList.add(credentialDocument);
when(sessionFactory.getCurrentSession()).thenReturn(session);
when(session.getCriteriaBuilder()).thenReturn(builder);
when(builder.createQuery(CredentialDocments.class)).thenReturn(criteria);
when(criteria.from(CredentialDocments.class)).thenReturn(credentialRoot);
}
@Test
public void testRetrieveListByUserId() {
criteria.select(credentialRoot);
when(credentialRoot.get("users")).thenReturn(path);
criteria.where(builder.equal(credentialRoot.get("users"), credentialDocument.getUsers())).distinct(true);
credentialDocDAO.retrieveListByUserId(credentialDocument.getUsers());
List<CredentialDocments> actualCredentialDocList = session.createQuery(criteria).getResultList();
Assertions.assertEquals(credentialDocumentList, actualCredentialDocList);
Assertions.assertEquals(1, actualCredentialDocList.size());
}
}
当我执行上述测试用例时,Nullpointer Exception正在为credentialRoot抛出。在下面的行criteria.where(builder.equal(credentialRoot.get(“用户”),credential/Document.getUsers()))中获取(“用户“)。distinct(true);
你能帮我们解决这个问题吗。提前谢谢。
当一个mock返回一个返回mock的mock时,对我来说,要么是实现设计不好,要么是测试设计不好(或两者兼而有之)。您的测试用例不会测试您的组件应该具有的行为或契约,而是会确认代码没有有效地测试任何内容。
如果您决定不使用标准API,而是使用 JPQL,该怎么办?合同不会改变,方法应该恢复列表用户Id
应该返回完全相同的东西。如果是这样,则测试也不应更改。但是您将不得不重写它,因为那里不再有标准API。那你会嘲笑什么呢?这很糟糕。
您的案例是可以使用inmemory数据库测试存储库合同而不是其实现的完美示例。
正如您现在所看到的,测试本身和测试中模拟的实现比测试组件本身更复杂,甚至无法按预期工作 - 现在您必须调试测试场景和模拟,这很糟糕。
考虑一个maven实用工具模块(模块1),它定义了一个抽象类:AbstractFoo.java。在测试资源下,编写了所述类的模型:foomockup.java。还编写了一个测试类:AbstractFootest.java。 现在考虑第二个模块(模块2),它包含一个使用AbstractFoo的类,并声明测试用例:bar.java和bartest.java。java在创建Bar实例的同时创建FooMo
本节介绍与JUnit Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 JUnit Mock Test I 问题1 - 以下哪项描述正确测试? A - 测试是检查应用程序功能的过程,是否按照要求运行。 B - 测试是单个实体(类或方法)的测试。 C - 以上两者。 D - 以上都
我想学习如何编写JUnit测试,但我完全失败了。 这是我的测试: 问题是这个简单的断言已经失败了。返回的列表是空的。我知道,我对这一切都不熟悉,但是从我的角度来看,失败是如此出乎意料,以至于我没有办法解决这个问题。 以下是全部代码(不太多): 要测试的功能就是这个,我知道它是有效的: 实际上,我只是想学习如何编写这样的测试,但是几天来我一直没有写出来。有相当多的例子和解释,但是不管我做什么尝试,我
我有一个简单的测试用例: FileManager中的函数删除 /myDir下的所有文件,然后再次保留文件。 如上所述,我有一个。运行时,我可以按以下顺序查看所有打印: 但是,测试在失败。有两件事我不明白: > 我不明白,它在中失败了,为什么我仍然可以看到打印的,听起来就像是失败了,它没有停止运行,而是继续运行下一个测试?JUnit测试用例中的场景背后发生了什么?? 我不明白的另一件事是为什么tes
首先请原谅我可能的无知,专业的做事方式对我来说很新鲜,如果有什么我没有提到的,请告诉我,我会尽力给你你需要的信息。。。 所以我试图用maven在Eclipse中构建我的webapp,我有一个测试套件 这很好,当我右键单击并以Junit test运行测试时,所有测试都通过了。 当我以Maven build的形式运行它,并以打包一系列测试为目标时,失败了??? 我的maven surefire插件配置