标签: junit5

@ Before,@ BeforeClass,@ BeforeEach和@BeforeAll之间的区别

两者之间的主要区别是什么

  • @Before@BeforeClass
    • 在JUnit 5 @BeforeEach@BeforeAll
  • @After@AfterClass

根据JUnit Api @Before用于以下情况:

编写测试时,通常会发现多个测试需要在运行之前创建类似的对象.

@BeforeClass可用于建立数据库连接.但不能@Before做同样的事情?

java junit annotations junit4 junit5

404
推荐指数
4
解决办法
25万
查看次数

JUnit 5:抛出如何断言异常?

有没有更好的方法断言方法在JUnit 5中抛出异常?

目前,我必须使用@Rule来验证我的测试是否会引发异常,但这对于我希望多个方法在我的测试中抛出异常的情况不起作用.

java junit junit5 junit-jupiter

162
推荐指数
8
解决办法
13万
查看次数

Surefire没有接受Junit 5测试

我用JUnit 5编写了一个简单的测试方法:

public class SimlpeTest {
    @Test
    @DisplayName("Some description")
    void methodName() {
        // Testing logic for subject under test
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时mvn test,我得到了:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running SimlpeTest
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
Run Code Online (Sandbox Code Playgroud)

不知何故,surefire没有认出那个测试类.我pom.xml看起来像:

<properties>
    <java.version>1.8</java.version>
    <junit.version>5.0.0-SNAPSHOT</junit.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.junit</groupId>
        <artifactId>junit5-api</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>snapshots-repo</id>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        <releases>
            <enabled>false</enabled>
        </releases> …
Run Code Online (Sandbox Code Playgroud)

java junit maven maven-surefire-plugin junit5

104
推荐指数
7
解决办法
3万
查看次数

Eclipse没有使用NoClassDefFoundError引起的JUnit 5测试

问题

每当我运行我的项目JUnit测试(使用JUnit 5与Java 9和Eclipse Oxygen 1.a)我遇到eclipse无法找到任何测试的问题.

说明

在运行配置下,eclipse甚至找不到用@Test注释的方法,而是只显示" (所有方法) ".以下图片有望为我的设置提供更好的一瞥:

https://imgur.com/a/FTe9c

控制台输出:

java.lang.NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory
    at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:31)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.base/java.lang.Class.newInstance(Unknown Source)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:368)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:363)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:307)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:222)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.core.LauncherFactory
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
    ... 11 more
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试了什么

我已经试过了

  • 从构建路径中删除测试文件夹并再次添加.
  • 将鼠标悬停在使用@Test注释的方法上开始测试,然后单击"Run as JUnit Test".
  • 从Buildpath中删除JUnit并再次添加
  • 重启日食
  • 我还将项目整个项目从一台机器移动到另一台机器,并在那里使用提供的eclipse安装进行了尝试
  • 重命名测试方法.
  • 重新键入@Test注释

其中一些步骤可以在这里找到,但最终问题仍然存在.

java eclipse junit java-9 junit5

64
推荐指数
14
解决办法
7万
查看次数

错误“带有 ID 'junit-vintage' 的 TestEngine 未能发现测试”与 Spring Boot 2.2

我有一个使用 Spring Boot 和 Junit 5 的简单应用程序:

  • 使用 Spring Boot 2.1(例如 2.1.8 或 2.1.12)时,我的单元测试运行顺利

  • 使用 Spring Boot 2.2(例如 2.2.2.RELEASE 或 2.3.2.RELEASE)时,我的单元测试失败并显示错误消息

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project XXX: There are test failures.
[ERROR]
[ERROR] Please refer to D:\Projets\workspace\XXX\target\surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] There was an error in the forked process
[ERROR] TestEngine with ID 'junit-vintage' failed to discover tests
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: There …
Run Code Online (Sandbox Code Playgroud)

spring-boot junit5

60
推荐指数
8
解决办法
7万
查看次数

如何在JUnit5中使用Mockito

如何使用Mockito和JUnit 5注射?

在JUnit4中,我可以使用@RunWith(MockitoJUnitRunner.class)Annotation.在JUnit5中没有@RunWith注释?

java unit-testing mockito junit5

59
推荐指数
4
解决办法
4万
查看次数

org.junit.platform.commons.JUnitException:ID为“junit-jupiter”的TestEngine未能发现测试

我想在 Gradle 项目中实施 Junit 5 测试。我试过这个:

梯度配置:

plugins {
    id 'org.springframework.boot' version '2.5.5'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'test'
version = '0.0.1'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

ext {
    set('springCloudVersion', "2020.0.4")
}

dependencies {
    ...............
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

test {
    useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)

联合测试:

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;

import java.util.concurrent.TimeUnit;

public class GeneratePdf {

    @DisplayName("Test MessageService.get()")
    @Test
    @Timeout(value = 60, unit …
Run Code Online (Sandbox Code Playgroud)

java junit spring-test junit5 junit-jupiter

57
推荐指数
4
解决办法
13万
查看次数

Junit 5 - 没有为参数注册 ParameterResolver

来源:JUnit 5、Eclipse 4.8、Selenium

我可以在没有任何特殊测试框架的情况下编写和执行 Selenium 脚本,但我想使用 Junit 5(因为我们依赖其他工具)并且我从未见过这样的错误“org.junit.jupiter.api.extension.ParameterResolutionException”而与 Junit 4 一起工作。目前它是 Junit 5,我用谷歌搜索它以获得某种想法,但无法解决问题。

测试脚本:

package login;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;



public  class loginTest  {

    public  WebDriver driver = null   ;


    public loginTest(WebDriver driver)
    {
        this.driver=driver;
    }


    @BeforeEach
    public void setUp() throws Exception 
    {

        driver.get("google.com");
        System.out.println("Page title is: " + driver.getTitle());
    }

    @Test
    public void test() {
            // some action here I have in original script
        System.out.println("Page title is: " …
Run Code Online (Sandbox Code Playgroud)

java selenium-webdriver junit5

51
推荐指数
8
解决办法
7万
查看次数

当看起来没问题时,Mockito会给出UnfinishedVerificationException

UnfinishedVerificationException当我认为我已经完成了所有事情时,Mockito似乎正在投掷.这是我的部分测试用例:

HttpServletRequest req = mock(HttpServletRequest.class);
when(req.getHeader("Authorization")).thenReturn("foo");

HttpServletResponse res = mock(HttpServletResponse.class);

classUnderTest.doMethod(req, res); // Use the mock

verify(res, never());
verify(req).setAttribute(anyString(), anyObject());
Run Code Online (Sandbox Code Playgroud)

这是部分类和方法:

class ClassUnderTest extends AnotherClass {
    @Override
    public String doMethod(ServletRequest req, ServletRequest res) {
        // etc.
        return "someString";
    }
}
Run Code Online (Sandbox Code Playgroud)

忽略你不应该模仿你不拥有的接口的事实,为什么Mockito给我以下信息?

org.mockito.exceptions.misusing.UnfinishedVerificationException: 
Missing method call for verify(mock) here:
-> at (redacted)

Example of correct verification:
    verify(mock).doSomething()

Also, this error might show up because you verify either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.

at [test method name and …
Run Code Online (Sandbox Code Playgroud)

junit unit-testing mockito junit5

37
推荐指数
5
解决办法
3万
查看次数

如何在Gradle中使用JUnit 5?

在成功运行JUnit 4测试后,我正在尝试将JUnit 5与Gradle一起使用.

预期的结果: JUnit 4测试在输出中给出了一个很好的'传递',并且输入了一个html报告build/reports/tests.

实际结果: JUnit 5测试如下所示不输出任何内容(...) build succesful,虽然我知道测试实际上没有运行,因为没有传递/跳过/失败的测试日志输出,并且fail在测试中放置一个使构建成功.

在很多我认为主要是不相关的输出之间运行gradle test --info收益率Skipping task ':testClasses' as it has no actions..令人惊讶的是,它也说Executing task ':test'Generating HTML test report... Finished generating test html resultsxml中的类似build/test-results/test,而xml没有生成,html显示没有测试运行且没有错误,测试确实没有运行.

我认为非常有趣的是gradle test --debug收益率

[TestEventLogger] Gradle Test Run :test STARTED
[org.gradle.api.internal.tasks.testing.junit.JUnitDetector] test-class-
scan : failed to scan parent class java/lang/Object, could not find the class file
[TestEventLogger]
[TestEventLogger] Gradle Test Run :test …
Run Code Online (Sandbox Code Playgroud)

junit gradle build.gradle junit5

33
推荐指数
4
解决办法
3万
查看次数