两者之间的主要区别是什么
@Before
和 @BeforeClass
@BeforeEach
和@BeforeAll
@After
和 @AfterClass
根据JUnit Api @Before
用于以下情况:
编写测试时,通常会发现多个测试需要在运行之前创建类似的对象.
而@BeforeClass
可用于建立数据库连接.但不能@Before
做同样的事情?
我设置了一个带有几个测试的类,而不是使用@Before
我希望有一个在所有测试之前只执行一次的设置方法.Junit 4.8有可能吗?
我应该在这样的声明中初始化类字段吗?
public class SomeTest extends TestCase
{
private final List list = new ArrayList();
public void testPopulateList()
{
// Add stuff to the list
// Assert the list contains what I expect
}
}
Run Code Online (Sandbox Code Playgroud)
或者像setUp()这样?
public class SomeTest extends TestCase
{
private List list;
@Override
protected void setUp() throws Exception
{
super.setUp();
this.list = new ArrayList();
}
public void testPopulateList()
{
// Add stuff to the list
// Assert the list contains what I expect
}
}
Run Code Online (Sandbox Code Playgroud)
我倾向于使用第一种形式,因为它更简洁,并允许我使用最终字段.如果我不需要使用setUp()方法进行设置,我是否还应该使用它,为什么? …
我相信我们都知道setUp(@Before)将在任何测试方法之前执行,而tearDown(@After)将在测试方法之后执行.
我们也知道Junit将为每个测试方法创建一个Test实例.
我的问题是,我们可以将setUp方法内容移动到类Constructor并删除setUp方法吗?是否有任何特定的理由保持setUp方法?
我已经开始测试,现在我想使用@After
,@Before
并@Test
但我的应用程序只运行的@Before
方法和控制台提供输出
之前
但是,如果我删除@After
并@Before
运行@Test.我的代码在这里:
public class TestPractise extends AbstractTransactionalDataSourceSpringContextTests{
@Before
public void runBare(){
System.out.println("before");
}
@Test
public void testingMethod(){
System.out.println("testing");
}
@After
public void setDirty(){
System.out.println("after");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不@After
,@Test
并@before
同时工作?
我非常明白什么@BeforeClass
是.它在JUnit测试运行开始之前执行一次,@Before
并且在每个测试用例之前执行方法.我的问题是关于一个非常高级的stackoverflow用户的旧帖子(PéterTörök68.8k)请参考[stackoverflow问题] [1]:JUnit:使用构造函数而不是@Before,它发布在大约2年前但是在JUnit4上.所以我认为它仍然有效且真实.
他在这里提到
@Before相当于测试类的构造函数
和
JUnit为每个@Test创建一个新的测试类实例,
那么JUnit如何@BeforeClass
只管理在测试类中定义的一次运行?