草庐IT

unit-testing

全部标签

java - 使用内存数据库进行单元测试

这个问题在这里已经有了答案:RunningPostgreSQLinmemoryonly(10个答案)关闭8年前。我有PostgreSQL数据库。它用于单元测试。我想加快测试速度,所以我想使用某种内存数据库(例如H2)。我想转储数据库(来自PostgreSQL)并将这样的转储导入内存数据库。您对内存数据库的选择有什么建议吗?我希望该数据库与PostgreSQL兼容。

java - 一个 JUnit 如何测试交互式的、基于文本的 Java 应用程序?

理想情况下,我想编写JUnit测试代码,以交互方式测试学生基于文本的I/O应用程序。使用System.setIn()/.setOut()会导致问题,因为底层流正在阻塞。Birkner的系统规则(http://www.stefan-birkner.de/system-rules/index.html)在较早的帖子(Testingconsolebasedapplications/programs-Java)中被推荐,但它似乎要求在运行单元测试目标之前提供所有标准输入,因此不是交互式的。要提供具体的测试目标示例,请考虑这个猜谜游戏代码:publicstaticvoidguessingGame

java - 使 IntelliJ 生成测试而不抛出异常

当我使用IntelliJIDEA的CreateTest功能时,它会生成带有throwsException子句的测试用例,例如:@TestpublicvoidtestIsInteger()throwsException{}这让我有点恼火:我更喜欢只在必要时自己添加特定的throws子句。这样我就可以一目了然地看到每个测试用例可能抛出什么样的异常。如何更改IntelliJ的这种行为以省略throws子句?或者我想要这个是错误的?创作者似乎认为这种默认行为是件好事。 最佳答案 您可以进入设置/文件和代码模板/代码选项卡并更改JUnit测试

用于 getter setter 的 Java lombok 单元测试

我在我的Java项目中使用lombok,用@Getter和@Setter注释来注释我的对象的私有(private)成员变量。我们知道那些getter和setter会按预期工作。所以我们真的不需要对它们进行单元测试。但是,这会降低单元测试中代码的代码覆盖率。有没有办法告诉单元测试引擎不需要测试lombok生成的getters和setters? 最佳答案 从Lombok1.16.14开始,所有生成的方法都将使用@lombok.Generated进行注释。您可以从Cobertura测试报告中排除它们:org.codehaus.mojoco

java - 为什么 JUnit 5 测试不从抽象类继承 @Test 注解?

我刚刚意识到(在将遗留代码从JUnit4迁移到JUnit5时)我们的一些测试方法没有执行,因为它们没有@Test注释。他们没有它,因为它们覆盖了抽象父类(superclass)(存在注释的地方)的方法。我可以通过向每个方法添加@Test轻松解决此问题。但我想知道这是否是预期的行为。它从JUnit4更改为5,但我在officialJUnit5UserGuide中找不到任何相关信息或其他任何地方。根据thisquestion,注解通常不被继承。但似乎这是在新的JUnit版本中有意更改的。(或者我错过了什么?)抽象测试类importorg.junit.jupiter.api.Test;abs

java - 模拟 getClass()

在Java中,我想为方法编写测试(简化片段):publicclassMyClass{privatestaticfinalSetSOME_SET=newHashSet(Arrays.asList(Foo.class,Bar.class));publicbooleanisValid(Classclazz){returnSOME_SET.contains(clazz);}}下面测试的问题importstaticorg.mockito.Mockito.when;importorg.mockito.Mockito;publicclassMyClassTest{@TestpublicvoidisV

java - 更改数据库模式和单元测试

在我们开始之前,我知道很少有人认为命中数据库的测试不是“单元测试”。也许“集成测试”会是一个更好的名字。无论哪种方式,开发人员都会对数据库进行测试。为了启用单元测试,我有一个开发人员本地数据库,我清除了该数据库,并在每次测试开始时使用dbUnit填充了一组已知数据。.这一切都运行良好,直到测试使用的表以某种方式发生变化并且我必须手动更新所有XML数据集。这是一种痛苦。我认为其他人一定遇到了同样的问题,并希望找到一个很好的巧妙解决方案。那么对于需要填充数据库的测试,您使用什么以及如何处理表定义更改?(虽然我使用Java,但我对使用不同技术的解决方案持开放态度。)编辑:澄清一点。我有一个人

java - 测试 Hibernate DAO,无需围绕它构建宇宙

我们有一个使用spring/Hibernate/MySQL构建的应用程序,现在我们想测试DAO层,但这里有一些我们面临的缺点。考虑多个对象相互连接的用例,例如:书有页。没有Book就不能存在Page对象,因为book_id是Page中的强制FK。为了测试页面,我必须创建一本书。这个简单的用例很容易管理,但是如果你开始构建一个库,直到你没有创建围绕Book和Page的整个宇宙,你才能测试它!所以要测试Page;创建图书馆创建部分创建流派创建作者创建书籍创建页面现在测试页面。有没有一种简单的方法可以绕过这个“universecreation”并单独测试页面对象。我还希望能够测试与Page相

java - 测试调用 : how to do set up common to all test suites

有没有办法知道JUnit4测试类是否由测试套件启动?我有全局的东西,我想在所有测试之前运行(关于内存数据库),所以我想在测试服中做它。但是,我仍然希望能够在没有测试服的情况下一次启动一个测试,所以我需要知道我是否需要在测试的@Before部分初始化全局事物......有人知道吗如果它是可能的? 最佳答案 有几种方法可以实现这一点。最简单和最简单的方法是在套件的开始和结束时运行一个“测试”,它会设置您的数据库,然后设置一个全局标志。在您的@Before和@After测试中,您检查此标志,并在必要时进行设置/拆卸。@RunWith(Su

java - 使用不同的参数运行两个相同的测试

我有一个包含15-20个不同测试用例的测试,我想用两个不同的参数运行相同的测试两次,这些参数应该传递给测试的BeforeClass方法,例如:publicclassTestOne{privatestaticClassToTestclassToTest;@BeforeClasspublicstaticvoidsetUp()throwsException{classToTest=newClassToTest("Argument1","Argument2");}@TestpublicvoidtestOne(){........roughly15-20testshere}publicclass