我有一个单元测试类,如下所示,
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class MyTest {
private static final int MY_CONSTANT = 7;
private String expectedValue = "expected value";
@Test
public void test1() {
int value = 50; // get by processing
int ans = value / MY_CONSTANT ;
String actual = "actual string"; // get by processing
Assert.assertEquals(expectedValue, actual);
}
@Test
public void test2() {
int value = 40; // get by processing
int ans = value / MY_CONSTANT ;
String actual = "actual string 2"; // get by processing
Assert.assertEquals(expectedValue, actual);
}
}
有人会像下面那样写,
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class MyTest {
@Test
public void test1() {
int value = 50; // get by processing
int ans = value / 7 ;
String actual = "actual string"; // get by processing
Assert.assertEquals("expected value", actual);
}
@Test
public void test2() {
int value = 40; // get by processing
int ans = value / 7 ;
String actual = "actual string 2"; // get by processing
Assert.assertEquals("expected value", actual);
}
}
两者都可以正常工作,但是在这样的单元测试方法中共享成员变量是一个好习惯吗?
从上述两个方面做到这一点的最佳方式是什么?
答案 0 :(得分:2)
当然,如果共享值是不可变的。无论语言/测试框架如何,在测试之间共享可变值通常不是一个好主意。这可能会限制您按特定顺序运行测试,或者要求您在运行相关测试之前运行某些修改该值的测试。
另一个考虑因素是,在测试之间共享常量值可能会使代码更改时更脆弱或更难维护。它介绍了测试之间可能不必要的耦合。
要问自己一个好问题是我正在做什么权衡?如果它只是为断言定义一个常量,那么我可能不会这样做,除非这个值很麻烦在每个测试中定义。