Tag: unit testing

测试Mule中的子流程

我已经开始将测试用例写入我的Mule项目了。 我已经为我的Main Flows编写了function测试用例,如下所示。 public void testMainFlow_1() throws Exception{ MuleClient client = muleContext.getClient(); MuleMessage result = client.send(helloServiceAddress, fileAsString(“SamplePayloads/input_Request.xml”), properties); assertNotNull(“Null Result”, result); assertEquals(result.getPayloadAsString(), fileAsString(“SampleResponses/sampleResponse.xml”)); } 但是我如何测试我的子流程。 他们没有任何终点。 那么如何将有效载荷传递给它们并进行测试呢。 以下是我的流量配置。 …. …. …. …. …. …. …. …. …. ….

如何测试调用父类的受保护(不需要)方法的方法?

我陷入了一个非常奇怪的境地。 我有一些我需要测试的特定代码。 这里是: public class A { /* * The real method of real class is so big that I just don’t want to test it. * That’s why I use throwing an exception. */ protected void method(Integer result) { throw new RuntimeException(“Oops!”); } protected T generifiedMethod(String s, T type) { throw new RuntimeException(“Oops!”); } […]

当transactionManager未命名为“transactionManager”时

我正在尝试Spring 3(.0.2.RELEASE)和JPA2和Hibernate 3.5.1-Final …有一点让我感到不安的是,spring似乎只接受一个名为“transactionManager”的事务管理器 如果我没有将它命名为“transactionManager”,Spring将抛出NoSuchBeanDefinitionException:没有定义名为’transactionManager’的bean 。 这是我的配置: 在此配置中,实体管理器工厂不一定命名为“entityManagerFactory”,“txAdvice” 也不一定命名为“txAdvice”。 但我不知道为什么Spring上需要一个名为“transactionManager”的事务管理器? 有没有办法不将事务管理器命名为“transactionManager”? (我正在运行多个spring配置文件,所以我尽量避免名称冲突) 测试代码: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={“classpath:mining.xml”}) public class MiningPersonDaoTest { @Inject private EntityManagerFactory miningEntityManagerFactory; @Inject private MiningPersonDao miningPersonDao; @Transactional @Test public void testUpdate() { MiningPerson p = miningPersonDao.get(42L); p.setLocationName(“OOXX”); miningPersonDao.update(p); System.out.println(p); } }

使用带有OnException定义的adviceWith进行Camel路由测试

我有一个非常简单的Camel路由定义,它只包含一些OnException谓词来处理各自的exception和一些日志语句。 from(“hazelcast:seda:someQueue”) .id(“someQueueID”) .onException(CustomException.class) .handled(true) .log(LoggingLevel.WARN, “custom exception noticed”) .end() .onException(IOException.class, FileNotFoundException.class) .asyncDelayedRedelivery() .redeliveryDelay(3*1000*60) // 3 Minutes .maximumRedeliveries(3) .log(LoggingLevel.WARN, “io exception noticed”) .end() .onException(Exception.class) .log(LoggingLevel.WARN, “general exception noticed”) .end() .log(“Starting route”) .bean(TestBean.class) .log(“Finished route”); bean本身也很简单,只是检查一个header参数并抛出一个适当的exception public class TestBean { @Handler public void checkData(@Headers final Map headers) throws CustomException, IOException, Exception { Integer testVal = (Integer)headers.get(“TestValue”); […]

如何开始测试(jMock)

我正在努力学习如何编写测试。 我也在学习Java,有人告诉我应该学习/使用/练习jMock,我在网上发现了一些有助于某些扩展的文章: http://www.theserverside.com/news/1365050/Using-JMock-in-Test-Driven-Development http://jeantessier.com/SoftwareEngineering/Mocking.html#jMock 我发现的大多数文章都是关于测试驱动的开发,首先编写测试然后编写代码以使测试通过。 我现在不是在寻找,我正在尝试使用jMock为现有代码编写测试。 对于我来说, 官方文档是模糊的,至少可以说是太难了。 有没有人有更好的方法来学习这个。 好书/链接/教程对我很有帮助。 谢谢 编辑 – 更具体的问题: http://jeantessier.com/SoftwareEngineering/Mocking.html#jMock – 来自这篇文章 试过这个来模拟这个简单的类: import java.util.Map; public class Cache { private Map underlyingStorage; public Cache(Map underlyingStorage) { this.underlyingStorage = underlyingStorage; } public String get(int key) { return underlyingStorage.get(key); } public void add(int key, String value) { underlyingStorage.put(key, value); } public void […]

如何从EclEmma中的覆盖率计算中排除类,而不实际将它们从覆盖范围本身中排除

我正在使用EclEmma来测试我的场景测试的覆盖范围,并在我的项目中使用案例测试。 我有一个Base包,其中包含最常用的类和用例测试。 报道如下: 我想要的是从覆盖率计算中排除用例测试(例如BugReportTest)。 但我确实想要考虑其中的测试。 我知道如何从覆盖范围中排除整个类,但如果我这样做,我的覆盖率会下降,因为检查我的代码的哪些行被测试的实际测试被遗忘了。 由于隐私原因,这些用例测试确实需要保留在Base包中。

Junit测试后的数据库清理

我必须使用Junit测试一些Thrift服务。 当我将测试作为Thrift客户端运行时,服务会修改服务器数据库。 我无法找到一个好的解决方案,可以在每次测试运行后清理数据库。 清理很重要,特别是因为ID必须是唯一的,目前从XML文件中读取。 现在,我必须在运行测试后手动更改ID,以便下一组测试可以运行而不会在数据库中抛出主键冲突。 如果我可以在每次测试运行后清理数据库,那么问题就完全解决了,否则我将不得不考虑其他解决方案,比如生成随机ID并在需要ID的地方使用它们。 编辑:我想强调一下,我正在测试一个写入数据库的服务,我没有直接访问数据库。 但是,由于服务是我们的,我可以修改服务,以便在需要时提供任何清理方法。

我应该如何在Maven管理的Java项目中发现测试资源文件?

我有一个使用普通Maven结构的项目,例如 module \ src \ main – java – resources \ test – java – resources 在test/resources ,我想为我正在编写的解析器保留一组测试输入文件,然后通过测试套件运行目录中的所有文件。 正如现在所写,测试代码在命令行中运行,但在通过Eclipse JUnit插件运行时失败: File file = new File(“src/test/resources”); file.list(); (我实际上使用的是FilenameFilter ,但我正在尝试简化。) 在使用调试器进行unit testing后,问题结果是我构建的文件指向/path/to/workspace/myproj/src/test/resources ,而实际文件位于/path/to/workspace/myproj/modulename/src/test/resources (这是一个Maven多模块项目)。 显然,从命令行运行mvn test时这不是问题。 我想我的问题是双重的:一, 我做错了吗? 我看到很多人使用类加载器来发现资源,就像在这个问题中一样 ,但是我不想要特定类型的所有资源 ,只需要测试/资源下的一个目录。 第二,如果这不是一个可怕的想法, 我是否有配置错误 (例如它“应该”工作)? 这是Eclipse的错,Maven问题还是什么?

如何对SQL查询进行unit testing?

我有一个类DBHandler ,它接受一个查询,通过SQL服务器运行它,检查错误并返回结果。 我怎样才能对这门课进行unit testing? 编辑 :我会尝试更精确: DBHandler负责将查询传递给服务器。 为了测试它实际上是这样,抛出正确的exception等,我想将它连接到我将填充的模拟数据库。 我的问题是 – 怎么做? 如何创建处理调用的模拟“服务器”?

每层集成测试是一个好习惯吗?

我有一个使用spring-mvc的应用程序,基本上我们有一个表示层(控制器),服务层(业务单元,帮助器),集成层和数据访问层(jdbc / jpa存储库),我们希望确保使用未来的测试除了代码之外不会破坏以前工作的任何东西,为此我们使用unit testing(mockito)和集成测试(spring-test,spring-test-mvc)。 每个类/组件进行unit testing,基本上我们试图对输入输入和这些组件中的可能流进行良好的覆盖,这个动作工作正常,这里没有疑问,因为unit testing是关于确保单元按预期工作。 集成测试是不同的故事和非常有争议的一个,因为现在我们有时使用我们用于设计unit testing的相同场景,但使用真实平台等可以使用整个系统,但我对这里的最佳实践有疑问。 由于我们有一个控制器,服务,数据层一种方法是每层IT,例如我们有UserService类,我们将有UserServiceTest,它将是Unit测试和UserServiceIT,但可维护性不理想,我觉得有时候我们会重复相同的测试场景,但现在使用真实系统。 这种做法真的有意义吗或在哪种情况下这是有道理的? 如果我们已经在课堂上有100%的测试覆盖率进行unit testing,为什么我们需要IT来实现这一目标,我们认为这只是为了确保真正的组件能够启动?,有意义的是拥有所有相同的场景或哪些是一个很好的标准来决定? 其他方法只是通过集成测试来处理最重要的测试用例,而只是来自控制器层,这意味着调用REST服务并validationJSON输出。 这就够了吗?我们不需要在其他层中validation更多东西吗? 我知道调用真正的REST api将在所有层(控制器,服务,dao)下面使用但这已经足够了吗? 你会在这里说些什么吗? 如果我们有一个帮助类我不认为有单位和IT是有意义的,因为大多数方法只有一个目的我觉得unit testing在这里就够了,你认为相同吗? 数据层中的某些类可以使用Criteria API,QueryDSL用于那些我使用IT的人,因为在某些情况下unit testing非常困难,这是一个有效的理由吗? 我正在努力获得最好的方法,技巧和实践,使确保系统完整性的任务成为真正有价值的过程,同时牢记这些东西的可维护性。