JUnit @Ignore 测试注解示例

有时您可能需要不执行某个方法/代码或测试用例,因为编码尚未完全完成。对于那个特定的测试,JUnit 提供了@Ignore注解来跳过测试。

什么是 JUnit @Ignore 测试注解

@Ignore 测试注解用于忽略特定的测试或测试组,以避免构建失败。

@Ignore 注解可以在以下两种情况下使用

  1. 如果您想忽略一个测试方法,请将 @Ignore 与 @Test 注解一起使用。
  2. 如果您想忽略一个类的所有测试,请在类级别使用 @Ignore 注解。

您可以在 @Ignore 注解提供的可选参数中提供禁用测试的原因。

这将帮助其他开发人员在同一段代码上工作时,理解“为什么某个特定的测试被禁用?” 当该特定测试的问题解决后,您只需通过删除@Ignore 注解来启用它。

Junit 测试示例 – 忽略

如上述定义所述,您可以使用 @Ignore 注解来忽略一个测试或一组测试。

让我们通过简单的示例和以下给定的场景来理解它

  1. 创建一个不忽略测试的简单测试类。
  2. 使用 @Ignore 注解忽略一个测试方法。
  3. 使用带有适当原因的 @Ignore 注解忽略一个测试方法。
  4. 使用 @Ignore 注解忽略所有测试方法。

创建一个不忽略测试的简单测试类

让我们创建一个简单的Java类,它打印两种类型的消息。

  • 第一个方法打印一个简单的消息,并且
  • 第二个方法打印一个“hi”消息

JUnitMessage.java

package guru99.junit;		

public class JUnitMessage {				

    private String message;					

    public JUnitMessage(String message) {					
        this.message = message;							
    }		
    		
public String printMessage(){		
    		
    System.out.println(message);					
    		
    return message;					
}    		
    		
public String printHiMessage(){		
    		
    message="Hi!"+ message;							
    		
    System.out.println(message);					
    		
    return message;					
}    		
    		
}		

JunitTestExample.java

让我们创建一个 JUnit 测试类来测试 JUnitMessage.java。

在这个 JUnit 测试类中,

  • 第一个测试,名为“testJUnitMessage()”,测试上述类的“printMessage()”方法。
  • 同样,第二个测试,名为“testJUnitHiMessage”,测试上述类的“testJUnitHiMessage”。
package guru99.junit;		

import static org.junit.Assert.assertEquals;				

import org.junit.Test;		

public class JunitTestExample {				

    public String message = "Guru99";							

    JUnitMessage junitMessage = new JUnitMessage(message);							

    @Test		
    public void testJUnitMessage() {					

        System.out.println("Junit Message is printing");					
        assertEquals(message, junitMessage.printMessage());					

    }		

    @Test		
    public void testJUnitHiMessage() {					
        message="Hi!" +message;							
        System.out.println("Junit Hi Message is printing ");					
        assertEquals(message, junitMessage.printHiMessage());					

    }		
}		

TestRunner.java

让我们创建一个测试运行器类来执行 JunitTestExample.java

package guru99.junit;		

import org.junit.runner.JUnitCore;		
import org.junit.runner.Result;		
import org.junit.runner.notification.Failure;		

public class TestRunner {				
			public static void main(String[] args) {									
      Result result = JUnitCore.runClasses(JunitTestExample.class);				
			for (Failure failure : result.getFailures()) {							
         System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      	

输出

Creating a Simple Test Class without Ignoring a Test

控制台上的打印语句

Junit Hi 消息正在打印

嗨!Guru99

Junit 消息正在打印

Guru99

使用 @Ignore 注解忽略一个测试方法

让我们创建忽略测试来禁用上述示例中的测试。为此,您需要在要跳过的方法中使用 @Ignore。

让我们为 JunitTestExample.java 中的 testJUnitMessage() 执行此操作

JunitTestExample.java

package guru99.junit;		

import static org.junit.Assert.assertEquals;				

import org.junit.Ignore;		
import org.junit.Test;		

public class JunitTestExample {				

    public String message = "Guru99";							

    JUnitMessage junitMessage = new JUnitMessage(message);							

    @Ignore		
    @Test		
    public void testJUnitMessage() {					

        System.out.println("Junit Message is printing ");					
        assertEquals(message, junitMessage.printMessage());					

    }		

    @Test		
    public void testJUnitHiMessage() {					
        message="Hi!" +message;							
        System.out.println("Junit Hi Message is printing ");					
        assertEquals(message, junitMessage.printHiMessage());					

    }		
}

输出

让我们执行并验证上述示例的输出。

下面的输出显示一个测试被跳过(禁用),如下标记所示

Creating a Simple Test Class without Ignoring a Test

控制台上的打印语句

Junit Hi 消息正在打印

嗨!Guru99

使用带有条件的 @ignore 注解

让我们举例说明如何忽略一个测试并同时定义忽略它的原因。如上所述,要提供原因,您可以在 @Ignore 注解中有一个可选参数,您可以在其中提供原因语句。

JunitTestExample.java

package guru99.junit;		

import static org.junit.Assert.assertEquals;				

import org.junit.Ignore;		
import org.junit.Test;		

public class JunitTestExample {				

    public String message = "Guru99";							

    JUnitMessage junitMessage = new JUnitMessage(message);							

    @Ignore("not yet ready , Please ignore.")					
    @Test		
    public void testJUnitMessage() {					

        System.out.println("Junit Message is printing ");					
        assertEquals(message, junitMessage.printMessage());					

    }		

    @Test		
    public void testJUnitHiMessage() {					
        message="Hi!" +message;							
        System.out.println("Junit Hi Message is printing ");					
        assertEquals(message, junitMessage.printHiMessage());					

    }		
}		

输出

同上。

使用 @Ignore 注解忽略所有测试方法。

如上所述,要忽略类中的所有测试,您需要在类级别使用 @Ignore 注解。

让我们修改上面的例子来理解如何忽略所有测试

package guru99.junit;		

import static org.junit.Assert.assertEquals;				

import org.junit.Ignore;		
import org.junit.Test;		

@Ignore		
public class JunitTestExample {				

    public String message = "Guru99";							

    JUnitMessage junitMessage = new JUnitMessage(message);							

    @Test		
    public void testJUnitMessage() {					

        System.out.println("Junit Message is printing ");					
        assertEquals(message, junitMessage.printMessage());					

    }		

    @Test		
    public void testJUnitHiMessage() {					
        message="Hi!" +message;							
        System.out.println("Junit Hi Message is printing ");					
        assertEquals(message, junitMessage.printHiMessage());					

    }		
}		

输出

Ignore Test Methods Using @Ignore Annotation

控制台上的打印语句

由于两个测试都通过在类级别使用 @Ignore 而被跳过,因此控制台上不会打印任何语句。

摘要

在本教程中,您学习了如何使用 @Ignore 注解来忽略单个测试、测试组或所有测试。

@Ignore 注解可以在以下两种情况下使用

  1. 如果您想忽略一个测试方法,请将 @Ignore 与 @Test 注解一起使用。
  2. 如果您想忽略一个类的所有测试,请在类级别使用 @Ignore 注解。

您还学习了如何提供一个语句,让其他开发人员理解为什么某个特定测试被禁用。