同时使用Junit4的@Parameterized参数化测试和Spring容器整合


之剑 2016.4.30

整合Spring容器

@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class TestBase {
@Autowired
protected TedaCaseService tedaCaseService;

private TestContextManager testContextManager;

@Before
public void setUpContext() throws Exception {
this.testContextManager = new TestContextManager(getClass());
this.testContextManager.prepareTestInstance(this);
}

}

Junit4的参数化测试

@RunWith(Parameterized.class):

package meeting.httpapi.test;

import com.teda.model.TedaCaseVo;
import meeting.TestBase;
import meeting.tool.SwordHttp;
import meeting.tool.TedaTool;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import java.util.Arrays;
import java.util.Collection;

/**
* @author jack
*/
@RunWith(Parameterized.class)
public class MeetingHttpApiTest extends TestBase {

@Test
public void testMeetingHttpApi() {
TedaCaseVo tedaCaseVo = tedaCaseService.getTedaCase(tedaCaseId);
String url = tedaCaseVo.getParamJsonStr();
TedaTool.record(tedaCaseVo, SwordHttp.get(url), tedaCaseService);
}

@Parameters
public static Collection data() {
return Arrays.asList(new Object[][]{{22L}, {23L}, {24L},{25L}, {26L}, {27L}});
}

public MeetingHttpApiTest(Long tedaCaseId) {
this.tedaCaseId = tedaCaseId;
}

protected Long tedaCaseId = 1L;

}




package meeting.tool;

import com.teda.model.TedaCaseVo;
import com.teda.service.TedaCaseService;

import static org.junit.Assert.assertTrue;

/**
* @author jack
*/
public class TedaTool {
/**
* @param tedaCaseVo
* @param actualOutput
*/
public static void record(TedaCaseVo tedaCaseVo, String actualOutput, TedaCaseService tedaCaseService) {
print("tedaCaseVo===" + tedaCaseVo);
print("actualOutput===" + actualOutput);
tedaCaseVo.setActualOutput(actualOutput);
String expectOutput = tedaCaseVo.getExpectOutput();
boolean contains = actualOutput.contains(expectOutput);
int state = contains ? 1 : 0;
tedaCaseVo.setState(state);
tedaCaseService.updateTedaCase(tedaCaseVo);
assertTrue(contains);
}


public static void print(Object o) {
System.out.println(o);
}

public static void clearData(TedaCaseVo tedaCaseVo, TedaCaseService tedaCaseService) {
tedaCaseService.clearData(tedaCaseVo);
}

}