Tag: unit testing

IntelliJ – 如何从“运行”视图中的失败unit testing跳转到源而不是编译类

当我在IntelliJ中运行我的JUnit测试并且其中一个失败时,我想通过双击它来跳转到失败测试的源代码(或者右键单击它并选择“Jump to source”或“Show source” “)在结果视图中(在”运行“视图中的失败测试列表中)。 但是,此function并不总是正常工作。 有时会显示源代码,有时在编辑器窗口中只显示测试的已编译“.class”文件。 在双击失败的测试后,我总是希望在编辑器窗口中看到源代码(“.java”文件)而不是“.class”文件。 其中一个解决方案是在编辑器窗口中单击“Attach Sources …”,其中显示测试类的“.class”文件。 但是,我必须为每个测试文件执行此操作,并且每次测试都需要花费很多时间重复执行。 在我看来,IntelliJ应该自动找到源代码,因为它存在于我的Project中(它是我自己的类,它的源代码在项目中,我从Project视图运行这个测试,其中带有源代码的类是可见的)。 如何配置IntelliJ,以便它为我运行的每个unit testing自动找到源代码? 显示的“.class”文件而不是“.java”文件包含在由Maven构建的jar文件中。

是否有用于运行测试组的JUnit TestRunner?

我目前正在使用JUnit 4,需要将我的测试划分为可以任意组合选择性运行的组。 我知道TestNG有一个注释测试的function,可以将它们分配给组,但我现在无法迁移到TestNG。 看来这可以通过一些自定义注释和一个自定义JUnit TestRunner在JUnit中轻松完成。 我已经检查了两个JUnit文档并在网上搜索但是找不到这样的东西。 有人知道这样的TestRunner吗? 更新:感谢您对测试套件的回复。 我应该在原来的问题中解决这些问题。 我们走了:我不想使用测试套件,因为他们需要我手动创建和管理它们,这意味着触摸我的所有测试并手动将它们安排到套件中(太多工作和维护噩梦)。 我需要做的就是运行所有unit testing,除了一些真正的集成测试。 所以我想注释这些,并运行所有其他人。 在其他时候,我想只运行集成测试。 我还需要将unit testing放入多个组中,这对套件来说是不可能的。 希望这有助于澄清事情。 更新2:如果JUnit没有这个OOB,我正在寻找一个将其添加到JUnit的开源库(注释+自定义JUnit Test Runner)。

除了使用集成测试运行器在IntelliJ IDEA项目中以“IntegrationTest”结尾的所有JUnitunit testing之外,我该如何运行?

我基本上想要在我的IntelliJ IDEA项目中运行所有JUnit 单元测试(不包括JUnit集成测试),使用JUnit的static suite()方法。 为什么要使用static suite()方法? 因为我可以使用IntelliJ IDEA的JUnit测试运行器在我的应用程序中运行所有unit testing(并通过命名约定轻松排除所有集成测试)。 到目前为止,代码如下所示: package com.acme; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class AllUnitTests extends TestCase { public static Test suite() { List classes = getUnitTestClasses(); return createTestSuite(classes); } private static List getUnitTestClasses() { List classes = new ArrayList(); classes.add(CalculatorTest.class); return classes; […]

Java:如何获取调用者函数名称

为了修复测试用例,我需要确定是否从特定的调用函数调用该函数。 我无法承受添加布尔参数,因为它会破坏定义的接口。 怎么去呢? 这就是我想要实现的目标。 这里我不能改变operation()的参数,因为它是一个接口实现。 operation() { if not called from performancetest() method do expensive bookkeeping operation … }

Spring Data:服务层unit testing

在我的项目中,我在进行unit testing时遇到了麻烦。 一个问题是,只需进行集成测试就可以更快地编写并测试组件实际协同工作。 unit testing新颖的“算法”左右似乎更容易。 unit testing服务类它只是感觉错误和无用。 我正在使用mockito来模拟spring数据存储库(因此也就是DB访问)。 问题是如果我告诉模拟的存储库在方法调用getById上返回实体A,它显然会返回它,服务也将返回它。 是的,该服务做了一些额外的东西,但非常小的事情,如加载惰性集合(来自hibernate)。 显然我在unit testing中没有任何惰性集合(代理)。 例: @Test public void testGetById() { System.out.println(“getById”); TestCompound expResult = new TestCompound(id, “Test Compound”, “9999-99-9”, null, null, null); TestCompoundRepository mockedRepository = mock(TestCompoundRepository.class); when(mockedRepository.findOne(id)).thenReturn(expResult); ReflectionTestUtils.setField(testCompoundService, “testCompoundRepository”, mockedRepository, TestCompoundRepository.class); TestCompound result = testCompoundService.getById(id); assertEquals(expResult, result); } 万岁,其余的都成功了。 多么惊喜! 不是真的没有。 有人可以向我解释我做错了什么吗? 或者这样一个测试的重点是什么? 我的意思是我告诉返回expResult然后它返回。 哇。 多么惊喜! 感觉就像我在测试mockito是否有效而不是我的服务。 […]

在Spring 3中创建单一测试

我开始测试应用程序,我想创建几个测试来学习Spring中的Mockito。 我一直在阅读一些信息,但我有一些普遍的疑问,我想问。 我见过Mockito测试,他们用类: @RunWith(MockitoJUnitRunner.class)注释类的测试,而在Spring文档中使用@RunWith(SpringJUnit4ClassRunner.class) 。 我不知道它们之间有什么区别,我应该将哪一个用于测试使用Mockito的Spring应用程序。 由于我还没有看到任何有测试的实际应用程序,我想知道开发人员会做的典型测试。 例如,在用户的典型CRUD应用程序(用户可以创建,更新……)中,任何人都可以进行常规测试。 谢谢。

新的JUnit 4.8.1 @Category渲染测试套件几乎已经过时了吗?

问题是“如何运行属于某个类别的所有测试?” 对于测试组织,以下方法的答案会更好吗? 定义包含所有测试的主测试套件(例如,使用ClasspathSuite ) 设计足够的JUnit类别集合(足以表示每个理想的测试集合可由一个或多个类别识别) 使每个测试符合相关类别的资格 基于主测试套件和类别集定义目标测试套件 例: 识别速度(慢速,快速),依赖(模拟,数据库,集成等),function( 填写适用的类别 ),域( 填写适用的类别 )等类别 。 要求每个测试都使用相关的类别进行适当的限定(标记)。 使用ClasspathSuite创建主测试套件(在类路径中找到所有测试) 通过使用类别限定主测试套件来创建目标套件,例如模拟测试套件,快速数据库测试套件,域X测试套件的慢速集成等。 我的问题更像是征求这种方法与经典测试套件方法的批准率。 一个无与伦比的好处是每个新测试都立即被相关套房包含,没有套件维护。 一个问题是每个测试的正确分类。

用Java进行unit testing – 它是什么?

你能用几句话解释一下: 为什么我们需要它/为什么它们让我们的生活更轻松? 如何进行unit testing[Java中的简单示例]? 什么时候我们不需要他们/类型的项目我们可以退出unit testing? 有用的链接

DBUnit数据集中与当前相关的日期

我想知道是否有任何方法可以在DBUnit XML数据集中明确指定日期作为日期。 有时代码逻辑在将来的日期和过去的日期是不同的,我想测试这两种情况。 当然,我可以指定类似于2239年11月5日的东西,并确保测试在这个日期之前有效但是有更优雅的方式。 我在Java开发期间还没有遇到过这样的情况,但是一旦我遇到日期前一天,日期前两天和日期前两天以上的代码逻辑不同的经历。 在这种情况下,编写数据库驱动测试的唯一可能解决方案是在数据导入期间插入相对日期。 DBUnit是否为此提供了任何设施?

模块化应用程序堆栈中的虚拟数据和unit testing策略

如何管理用于测试的虚拟数据? 将它们与各自的实体保持一致? 在一个单独的测试项目中? 使用外部资源的Serializer加载它们? 或者只是在需要的地方重新创建它们? 我们有一个应用程序堆栈,其中包含多个模块,每个模块都包含实体 每个模块都有自己的测试,需要运行虚拟数据。 现在,具有大量依赖性的模块将需要来自其他模块的大量虚拟数据。 然而,这些不会发布它们的虚拟对象,因为它们是测试资源的一部分,因此所有模块都必须一次又一次地设置它们需要的所有虚拟对象。 另外:我们实体中的大多数字段都不可为空,因此即使针对对象层运行事务也要求它们包含一些值,大多数时候还有其他限制,如唯一性,长度等。 是否有最佳实践方法或所有解决方案都妥协? 更多详情 我们的堆栈看起来像这样: 一个模块: src/main/java –> gets jared (…/entities/*.java contains the entities) src/main/resources –> gets jared src/test/java –> contains dummy object setup, will NOT get jared src/test/resources –> not jared 我们使用Maven来处理依赖关系。 模块示例: 模块A有一些虚拟对象 模块B需要自己的对象,与模块A相同 选项a) 测试模块T可以容纳所有虚拟对象,并将它们提供给所有模块中的所有测试中的测试范围(因此加载的依赖关系不会受到影响)。 那会有用吗? 含义:如果我在A中加载T并在A上运行install,它是否包含由T引入的引用,尤其不是B ? 然而A会知道B的数据模型。 选项b) 模块A在src/main/java../entities/dummy某处提供虚拟对象,允许B获取它们,而A不知道B的虚拟数据 选项c) 每个模块都包含外部资源,它们是序列化的虚拟对象。 它们可以由需要它们的测试环境反序列化,因为它依赖于它们所属的模块。 […]