这段代码在JAVA中如何适用于JUnit?
我有以下用于JUnit测试的代码:这段代码在JAVA中如何适用于JUnit?,java,Java,我有以下用于JUnit测试的代码: import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; public class JUnitHelloWorld { protected String s; @Before public void setup() { s = "HELLO WORLD"; } @Test
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
public class JUnitHelloWorld {
protected String s;
@Before
public void setup() {
s = "HELLO WORLD";
}
@Test
public void testHelloWorldSuccess() {
s = s.toLowerCase();
assertEquals("hello world", s);
}
// will fail even if testHelloWorldSuccess is called first
@Test
public void testHelloWorldFail() {
assertEquals("hello world", s);
}
}
现在,根据评论,为什么即使第一个方法被第一个调用,第二个方法也会失败?第一种方法不是将s的值改为小写吗?
@Before
发生在每次测试之前。这意味着运行它们的顺序无关紧要,因为它将始终执行设置,然后执行测试
标签
@BeforeClass
将提供您期望的行为。这在任何测试开始之前运行一次。@before
发生在每个测试之前。这意味着运行它们的顺序无关紧要,因为它将始终执行设置,然后执行测试
标签
@BeforeClass
将提供您期望的行为。它在任何测试开始之前运行一次。JUnit不会按代码顺序运行每个测试用例(带有@test的方法)。这就是为什么每个测试用例必须相互独立
另外,带有@Before标记的setup方法将始终在每个测试方法之前运行
因此,代码的执行顺序可能(但不一定)为:
JUnit不会按照代码的顺序运行每个测试用例(带有@test的方法)。这就是为什么每个测试用例必须相互独立 另外,带有@Before标记的setup方法将始终在每个测试方法之前运行 因此,代码的执行顺序可能(但不一定)为:
对于JUnit,testcase的执行顺序不是固定的。您可能会在方法m1之后编写方法m2,而在执行过程中,m2首先被执行。最好的方法是您的测试用例不应该基于测试用例执行顺序。 如果您只想对整个类执行一次,请尝试@BeforeClass 对于上述场景,请尝试以下操作:
protected String s;
private int flag ;
@BeforeClass
public beforeClass(){
flag = 0;
}
@Before
public void setup() {
s = "HELLO WORLD";
}
@Test
public void testHelloWorldSuccess() {
flag = 1;
s = s.toLowerCase();
assertEquals("hello world", s);
}
// won't fail even if testHelloWorldSuccess is called first
@Test
public void testHelloWorldFail() {
if(flag == 1)
assertEquals("hello world", s);
else
assertEquals("HELLO WORLD", s);
}
对于JUnit,testcase的执行顺序不是固定的。您可能会在方法m1之后编写方法m2,而在执行过程中,m2首先被执行。最好的方法是您的测试用例不应该基于测试用例执行顺序。 如果您只想对整个类执行一次,请尝试@BeforeClass 对于上述场景,请尝试以下操作:
protected String s;
private int flag ;
@BeforeClass
public beforeClass(){
flag = 0;
}
@Before
public void setup() {
s = "HELLO WORLD";
}
@Test
public void testHelloWorldSuccess() {
flag = 1;
s = s.toLowerCase();
assertEquals("hello world", s);
}
// won't fail even if testHelloWorldSuccess is called first
@Test
public void testHelloWorldFail() {
if(flag == 1)
assertEquals("hello world", s);
else
assertEquals("HELLO WORLD", s);
}
事实上,切换到@BeforeClass将获得并提供行为,但这将是糟糕的测试实践:-PIn在这种情况下,这是糟糕的测试实践,因为执行顺序很重要。我加入了
@BeforeClass
,这样OP就会明白如何从@BeforeClass
之前的@中获得他们期望的行为。实际上,切换到@BeforeClass将提供该行为,但这将是一种糟糕的测试实践:-PIn在这种情况下,这是一种糟糕的测试实践,因为执行顺序很重要。我在课前加入了@BeforeClass
,这样OP就会明白如何从@课前获得他们期望的行为。