全部产品
云市场

单元测试

更新时间:2019-09-10 18:33:20

SOFABoot 工程原型提供两类单元测试,一个是抽象类(AbstractTestBase)的测试基类,一个是继承这个抽象类的测试类(SofaRestServiceTest)。默认存放于需要部署的 JAR 包的 classpath 根目录下,即应用代码的 src/test/java 目录下。本文以 SOFABoot Web 工程生成的测试用例进行说明,您可以参考这两个单元测试示例,进行测试用例的编写。

更多单元测试的资料可以 参考 Spring Boot 官方文档

测试基类

以下为默认生成的 AbstractTestBase.java 测试基类的示例代码:

  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @SpringBootTest(classes = SOFABootWebSpringApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
  3. public abstract class AbstractTestBase {
  4. public static final String SOFA_REST_PORT = "8341";
  5. @Autowired
  6. public EmbeddedWebApplicationContext server;
  7. /**
  8. * 8080
  9. */
  10. @LocalServerPort
  11. public int definedPort;
  12. @Autowired
  13. public TestRestTemplate testRestTemplate;
  14. public String urlHttpPrefix;
  15. public String sofaRestHttpPrefix;
  16. @Before
  17. public void setUp(){
  18. sofaRestHttpPrefix = "http://localhost:" + SOFA_REST_PORT;
  19. urlHttpPrefix = "http://localhost:" + definedPort;
  20. childSetUp();
  21. }
  22. /**
  23. * 测试子类每个方法执行前需要进行的初始化代码放在此
  24. */
  25. public abstract void childSetUp();
  26. }

说明

  • SOFABootWebSpringApplication 类是 SOFABoot 的启动函数。在运行单元测试时,能直接启动 SOFABoot 框架,并完成所有依赖中间件的自动配置和启动。
  • 您可以在代码中注入需要的 bean 或者需要验证功能的 bean,如:基类中注入的 bean 为 EmbeddedWebApplicationContext 实例和 TestRestTemplate 实例,分别为用于测试用户上下文和用于测试 REST 功能的模板实例。

测试类

以下为默认生成的 SofaRestServiceTest.java 测试类的示例代码:

  1. public class SofaRestServiceTest extends AbstractTestBase {
  2. @Test
  3. public void testSofaRestGet() throws Exception {
  4. assertNotNull(testRestTemplate);
  5. String restUrl = sofaRestHttpPrefix + "/webapi/users/xiaoming";
  6. //TODO
  7. ResponseEntity<RestSampleFacadeResp> response = testRestTemplate.getForEntity(restUrl, RestSampleFacadeResp.class);
  8. RestSampleFacadeResp restSampleFacadeResp = response.getBody();
  9. assertTrue(restSampleFacadeResp.isSuccess());
  10. Map<String, Integer> demoUserModel = (Map<String, Integer>) restSampleFacadeResp.getData();
  11. assertTrue(demoUserModel.get("userId") >= 0);
  12. }
  13. }

说明
利用基类注入的 TestRestTemplate 实例、REST 端口号 8341 和待测试的 SOFAREST 的 URI,可以测试 SOFAREST 的功能,根据返回的数据结果进行校验。