我们有一个文本文件,其中给出了搜索查询列表和预期结果。如,
a:120 result1
b:220 result2
.....
.....
现在,我们需要编写一个JUnit(在我们的日常构建中大量使用)测试类,其中每行代表一个@Test method
。因此,我们知道,哪个搜索案例失败(UI)。
我们已经有了一个解决方案,我们只有一个@Test方法,我们有日志来检查哪个案例通过或失败了。
但是,我们试图将每个案例表示为junit方法。是否真的可以为JUnit架构动态创建@Test方法。
我们的@Test方法对于每个搜索案例都是相同的。这意味着,我们只想每次都传递一个不同的参数。
我已经为我的问题提出了一个JUnit3解决方案。需要帮助才能将其翻译为Junit4。
public static Test suite()
{
TestSuite suite = new TestSuite();
for ( int i = 1; i <= 5; i++ ) {
final int j = i;
suite.addTest(
new Test1( "testQuery" + i ) {
protected void runTest()
{
try {
testQuery( j );
} catch ( MalformedURLException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch ( SolrServerException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
);
}
return suite;
}
答案 0 :(得分:3)
在JUnit 4中,有一个名为“参数化测试”的概念正是用于此。
我不完全理解你上面的测试,但这应该给你一个提示:
@RunWith(Parameterized.class)
public class ParameterizedTest {
private String query;
private String expectedResult;
public ParameterizedTest(String query, String expectedResult) {
this.query = datum;
this.expectedResult = expectedResult;
}
@Parameters
public static Collection<Object[]> generateData() {
Object[][] data = {
{ "a:120", "result1" },
{ "b:220", "result2" },
};
return Arrays.asList(data);
}
@Test
public void checkQueryResult() {
System.out.println("Checking that the resutl for query " + query + " is " + expectedResult);
// ...
}
}