有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JUnit测试返回null和false

所以我在JUnit中练习参数化测试。我创建了这个类:

public class Operation {

    public Operation() {

    }

    public int add(int value, int num) {
        int ans = value + num;
        return ans;
    }

    public int subtract(int value, int num) {
        int ans = value - num;
        return ans;
    }
}

没什么特别的,只是一些运行测试的方法

我在这里有一个测试班:

import static org.junit.Assert.*;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

@RunWith(Parameterized.class)
public class OperationTest {

    private int value;
    private int num;

    public OperationTest(int expected, int value, int num) {
        this.value = value;
        this.num = num;
    }

    @Parameterized.Parameters
    public static Collection primeNumbers() {
        return Arrays.asList(new Object[][] {
                { 4, 2, 2 },
                { 66, 6, 60 },
                { 20, 19, 1 },
                { 82, 22, 50 },
                { 103, 23, 80 }
        });
    }

    @Test
    public void test() {
        Operation o = new Operation();
        assertTrue(value == o.add(value, num));
    }

}

最后,我有一个类来运行我的测试:

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(OperationTest.class);
        for(Failure f : result.getFailures()) {
            System.out.println(f.toString());
        }

        System.out.println(result.wasSuccessful());
    }
}

运行此操作时,输出为:

test[0](OperationTest): null
test[1](OperationTest): null
test[2](OperationTest): null
test[3](OperationTest): null
test[4](OperationTest): null
false

我希望所有这些都是真的,因为{4,2,2}意味着从2和2中期望4,这是作为操作类中add方法的参数给出的。。。我猜这可能不是正确的方法

我将非常感谢你的洞察力


共 (2) 个答案

  1. # 1 楼答案

    您没有在任何地方使用expected,甚至没有将其作为类状态的一部分。你在这里的断言:

    assertTrue(value == o.add(value, num));
    

    。。。不是在断言你想要它做什么。它只有在num为0时才起作用。仔细看

    你应该:

    // final is optional here, of course - but that's what I'd do, anyway :)
    private final int expected;
    private final int value;
    private final int num;
    
    public OperationTest(int expected, int value, int num) {
        this.expected = expected;
        this.value = value;
        this.num = num;
    }
    

    然后:

    assertTrue(expected == o.add(value, num));
    

    或者更好(更清晰的诊断):

    assertEquals(expected, o.add(value, num));
    
  2. # 2 楼答案

    如果valuenumber为零(我们可以通过查看您的测试编号看到),那么value == value + number怎么可能是真的?你显然错过了一些简单的逻辑。我想您需要第三个参数来表示预期结果,因此您可以执行以下操作:

    expected == o.add(value, number);