我正在尝试从之前在我的一个src / main类中设置的queue
参数化JUnit4测试。这是我到目前为止所做的,有一个测试套件的类(MigratorTestSuite
)
@RunWith(Suite.class)
@Suite.SuiteClasses({ParameterizedTest.class})
public class MigratorTestSuite {
@BeforeClass
public static void setUp() throws SAXException, ParserConfigurationException, GitAPIException, IOException {
Migrator.getReady();
}
@AfterClass
public static void tearDown() throws SQLException {
DatabaseManager.closeConnections();
RepositoryManager.closeRepository();
}
}
还有一个班级ParameterizedTest
,我正在弄清楚如何运行parameterized JUnit test,如下所示:
@RunWith(Parameterized.class)
public class ParameterizedTest {
@Parameterized.Parameters(name="whatever")
public static Queue<Deque<String>> data(){
return TestCasesConstructor.testCasesQueue;
}
private Deque<String> scenario;
public ParameterizedTest(Queue<Deque<String>> q){
scenario = q.peek();
}
@Before
public void initialize() throws ParserConfigurationException, IOException, SQLException, ClassNotFoundException {
System.out.println("--- Preparing database for running scripts");
DatabaseManager.dropDatabase();
DatabaseManager.createDatabase();
}
@Test
public void testPlainMigration() throws Exception {
Assert.assertTrue(Migrator.runScenario(this.scenario));
}
@After
public void after() throws SQLException {
DatabaseManager.closeConnections();
TestCasesConstructor.testCasesQueue.remove();
}
}
当我执行mvn clean install test -Dtest=MigratorTestSuite
时,结果是它找不到任何测试,当我调试它时,它显示:
没有测试发现匹配来自
org.junit.runner.Request
的任何参数的数据 在org.junit.internal.requests.FilterRequest.getRunner
我做错了什么?我应该在TestNG中更好地实现它吗?我是Junit的新手。
答案 0 :(得分:1)
data
方法应返回一组对象数组,即Collection<Object[]>
。每个对象数组都是一个测试向量,包含例如输入字符串和预期结果。
测试类构造函数应该将测试向量的元素作为参数。在上面的示例中,它将采用String和结果参数,您通常将其存储在字段中,以便实际的测试用例可以使用它。对于每个测试向量,都会创建一个新的测试类实例。
在您的情况下,您似乎希望将一系列方案用作参数。
因此,您的数据方法应该返回一个scenario- 数组的集合(每个数组长度为1),并且您的构造函数应该使用单个方案(而不是完整的收藏;所以没有必要'偷看'。
答案 1 :(得分:0)
你可以试试这个:
mvn clean install -Dtest=MigratorTestSuite test