标签: junit

你如何断言在JUnit 4测试中抛出某个异常?

如何以惯用方式使用JUnit4来测试某些代码是否会抛出异常?

虽然我当然可以这样做:

@Test
public void testFooThrowsIndexOutOfBoundsException() {
  boolean thrown = false;

  try {
    foo.doStuff();
  } catch (IndexOutOfBoundsException e) {
    thrown = true;
  }

  assertTrue(thrown);
}
Run Code Online (Sandbox Code Playgroud)

我记得有一个注释或一个Assert.xyz或者其他东西,对于这些类型的情况来说,远不如KUndgy 和JUnit的精神.

java junit assert exception junit4

1915
推荐指数
24
解决办法
120万
查看次数

为什么JUnit不提供assertNotEquals方法?

有人知道为什么JUnit 4提供assertEquals(foo,bar)但不提供assertNotEqual(foo,bar)方法吗?

它提供assertNotSame(对应assertSame)和assertFalse(对应assertTrue),所以看起来很奇怪他们没有打扰包括assertNotEqual.

顺便说一句,我知道JUnit-addons提供了我正在寻找的方法.我只是出于好奇而问.

java junit assert

421
推荐指数
6
解决办法
16万
查看次数

@ 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万
查看次数

如何在JUnit4中按特定顺序运行测试方法?

我想执行按@Test特定顺序注释的测试方法.

例如:

public class MyTest {
    @Test public void test1(){}
    @Test public void test2(){}
}
Run Code Online (Sandbox Code Playgroud)

我希望确保test1()test2()每次运行之前运行MyTest,但我找不到像这样的注释@Test(order=xx).

我认为这对JUnit来说非常重要,如果JUnit的作者不想要订单功能,为什么?

java junit unit-testing junit4

398
推荐指数
11
解决办法
36万
查看次数

Maven没有找到要运行的JUnit测试

我有一个maven程序,它编译得很好.当我运行mvn test它时不会运行任何测试(在TESTs标题下说There are no tests to run.).

我用一个超级简单的设置重新创建了这个问题,我将在下面包含以及运行时的输出-X.

单元测试从eclipse运行良好(两者都使用默认的junit包,当我改为包含maven下载的junit.jar时).mvn也test-compile正确地在test-classes下创建了类.我在OSX 10.6.7上使用Maven 3.0.2和java 1.6.0_24运行它.

这是目录结构:

/my_program/pom.xml
/my_program/src/main/java/ClassUnderTest.java
/my_program/src/test/java/ClassUnderTestTests.java
Run Code Online (Sandbox Code Playgroud)

pom.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>my_group</groupId>
    <artifactId>my_program</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>My Program</name>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
Run Code Online (Sandbox Code Playgroud)

ClassUnderTest.java:

public class ClassUnderTest {

    public int functionUnderTest(int n) {
        return n;
    }

}
Run Code Online (Sandbox Code Playgroud)

ClassUnderTestTests.java:

import org.junit.Assert;
import org.junit.Before; …
Run Code Online (Sandbox Code Playgroud)

java junit junit4 maven-3 maven

387
推荐指数
18
解决办法
22万
查看次数

System.out.println()的JUnit测试

我需要为一个设计很差的旧应用程序编写JUnit测试,并将大量错误消息写入标准输出.当getResponse(String request)方法行为正确时,它返回XML响应:

@BeforeClass
public static void setUpClass() throws Exception {
    Properties queries = loadPropertiesFile("requests.properties");
    Properties responses = loadPropertiesFile("responses.properties");
    instance = new ResponseGenerator(queries, responses);
}

@Test
public void testGetResponse() {
    String request = "<some>request</some>";
    String expResult = "<some>response</some>";
    String result = instance.getResponse(request);
    assertEquals(expResult, result);
}
Run Code Online (Sandbox Code Playgroud)

但是当它得到格式错误的XML或者不理解它返回的请求并将null一些东西写入标准输出时.

有没有办法在JUnit中断言控制台输出?要抓住像这样的案例:

System.out.println("match found: " + strExpr);
System.out.println("xml not well formed: " + e.getMessage());
Run Code Online (Sandbox Code Playgroud)

java console junit

346
推荐指数
8
解决办法
22万
查看次数

有条件地忽略JUnit 4中的测试

好的,因此@Ignore注释适用于标记不应运行测试用例.

但是,有时我想忽略基于运行时信息的测试.一个例子可能是我需要在具有一定数量内核的机器上运行并发测试.如果这个测试是在单处理器机器上运行的,我认为只是通过测试是不正确的(因为它还没有运行),并且当然不适合测试失败并打破构建.

所以我希望能够在运行时忽略测试,因为这似乎是正确的结果(因为测试框架将允许构建通过但记录测试未运行).我很确定注释不会给我这种灵活性,并且怀疑我需要手动为相关类创建测试套件.但是,文档没有提及任何关于这一点并且通过API查看它也不清楚如何以编程方式完成(即,我如何以编程方式创建Test@Ignore注释创建的实例相似或相似的实例?).

如果有人在过去做过类似的事情,或者对如何做到这一点有一个明确的想法,我会很高兴听到它.

java junit unit-testing ignore

346
推荐指数
3
解决办法
10万
查看次数

如何从命令行运行JUnit测试用例

我想从命令行运行JUnit测试用例.我怎样才能做到这一点?

junit command-line unit-testing

320
推荐指数
8
解决办法
34万
查看次数

Mockito:试图窥探方法是调用原始方法

我正在使用Mockito 1.9.0.我想在JUnit测试中模拟一个类的单个方法的行为,所以我有

final MyClass myClassSpy = Mockito.spy(myInstance);
Mockito.when(myClassSpy.method1()).thenReturn(myResults);
Run Code Online (Sandbox Code Playgroud)

问题是,在第二行,myClassSpy.method1()实际上是被调用,导致异常.我使用模拟的唯一原因是,以后,无论什么时候myClassSpy.method1()被调用,都不会调用真正的方法并myResults返回对象.

MyClass是一个接口myInstance,如果重要的话就是它的实现.

我需要做些什么来纠正这种间谍行为?

java junit mockito

313
推荐指数
6
解决办法
19万
查看次数

Mockito:如何在方法中创建的对象上调用方法?

我是Mockito的新手.

鉴于下面的类,我如何使用Mockito来验证someMethod在调用之后是否被调用了一次foo

public class Foo
{
    public void foo(){
        Bar bar = new Bar();
        bar.someMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想进行以下验证通话,

verify(bar, times(1)).someMethod();
Run Code Online (Sandbox Code Playgroud)

在哪里bar是一个模拟的实例Bar.

java junit unit-testing mockito

291
推荐指数
6
解决办法
47万
查看次数