package com.bnpparibas.test;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.bnpparibas.util.PendingUtil;
public class PendingTest {
PendingUtil pendingUtil = new PendingUtil();
boolean result;
@Test
public void fetchPendingWFFromDB()
{
result = pendingUtil.fetchPendingWFFromDB();
assertTrue(result);
}
@Test
public void runPendingBatch()
{
result = pendingUtil.runPendingBatch();
assertTrue(result);
}
@Test
public void checkQueuePostPendingRun()
{
result = pendingUtil.checkQueuePostPendingRun();
assertTrue(result);
}
}
以上是我的测试用例
public class PendingUtil {
public PendingUtil()
{
try {
System.out.println("In Const");
}
catch (SQLException e) {
e.printStackTrace();
}
}
上面是我从JUnit测试用例调用的类。
在我的测试用例中,我已经创建了一次对象..
PendingUtil pendingUtil = new PendingUtil();
但内部JUnit调用构造函数三次!! 这是可能的。
答案 0 :(得分:13)
您已使用@Test
注释了3个方法。来自此注释的JUnit API doc:To run the method, JUnit first constructs a fresh instance of the class then invokes the annotated method.
简而言之,整个测试类实例化了3次,因此PendingUtil
也是如此(每次测试类的后续实例都有一次)。
要执行您想要的操作,请将属性定义保留在原来的位置,但在使用@BeforeClass注释注释的新方法中为其分配PendingUtil
实例。
此外,您可以将该属性标记为vikingsteve建议的静态。
答案 1 :(得分:5)
您可以使用pendingUtil
方法创建@BeforeClass
。
答案 2 :(得分:0)
相反,如果您不希望PendingUtil被调用三次,您应该编写一个TestUtil包装器,它可能只是将Factory方法放在new PendingUtil()
之前,并且只创建一个实例。
答案 3 :(得分:0)
你可以使pendingUtil静态
static PendingUtil pendingUtil = new PendingUtil();
答案 4 :(得分:0)
嘿,仅用于Junit5更新,
您可以在@BeforeAll方法中创建endingUtil。
或如下所示:
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class PendingTest {
}
出于知识的考虑,如果我们需要为每个方法创建新的实例,则可以使用Lifecycle.PER_METHOD。