gpt4 book ai didi

java - JUnit 中全局变量的值更改为 null

转载 作者:行者123 更新时间:2023-12-02 02:22:43 25 4
gpt4 key购买 nike

我编写了一个简单的类,其中第一个函数的输出是第二个函数的输入,第二个函数的输出是第三个函数的输入。之后,我在另一个实现 JUnit @Test 用例的类中打印这些输出。

但是对于调用第二个函数的测试,我得到的“res”值为 null(它应该是第一个函数的输出并将其作为输入传递给第二个函数)。第三个函数也是如此。

我将“res”声明为全局变量。那么为什么它的值变为 null 而不是保存第一个函数的结果,然后保存第二个函数的结果(用于调用第三个函数)?

这是包含 3 个函数的类:

package con.nc.junitexmples.Junit4Examples;

public class StringExample {

public static String firstFunction() {

String msg1 = "msg1";
return msg1;

}

public static String secondFunction(String msg1) {

String msg2 = msg1+"msg2";
return msg2;

}

public static String thirdFunction(String msg2) {

String msg3= msg2+"msg3";
return msg3;

}

}

这里是实现 JUnit @Test 用例和打印输出的类:

package con.nc.junitexmples.Junit4Examples;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)

public class TestStringExample {

String res;

@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("\n\t\t-----JUnit cascading input Example------\n\n");
System.out.println("before class---->only once");


}
@Before
public void setUp() throws Exception {
System.out.println("\nbefore--->before each test case");
}

@Test
public void testFirstFunction(){
System.out.println("\ttest case: FIRST Function");

res = StringExample.firstFunction();
System.out.println("\t"+res);

}

@Test
public void testSecondFunction(){
System.out.println("\ttest case: SECOND Function");

res = StringExample.secondFunction(res);
System.out.println("\t"+res);

}

@Test
public void testThirdFunction(){
System.out.println("\ttest case: THIRD Function");

res = StringExample.thirdFunction(res);
System.out.println("\t"+res);

}


@After
public void tearDown() throws Exception {
System.out.println("after ---> after each test case\n\n");
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("after class--->only once");
}

}

这是我得到的输出:

    -----JUnit cascading input Example------


before class---->only once

before--->before each test case
test case: FIRST Function
msg1
after ---> after each test case



before--->before each test case
test case: SECOND Function
**nullmsg2**
after ---> after each test case



before--->before each test case
test case: THIRD Function
**nullmsg3**
after ---> after each test case


after class--->only once

如何将第一个函数的结果作为输入传递给第二个函数,依此类推?

最佳答案

每个测试都是自包含的、独立的,并且这些测试方法开始时的 res 值为 null

所以,这解释了为什么你会看到:

nullmsg2
nullmsg3

鉴于上面评论中的这个问题:

how do I pass output of first function as input to second function for second test?

您可以在一个测试方法中测试所有三个调用,如下所示:

@Test
public void testAll() {
String res = StringExample.firstFunction();
Assert.assertEquals("msg1", res);

res = StringExample.secondFunction(res);
Assert.assertEquals("msg1msg2", res);

res = StringExample.thirdFunction(res);
Assert.assertEquals("msg1msg2msg3", res);
}

关于java - JUnit 中全局变量的值更改为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48279425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com