Skip to content

Commit f282911

Browse files
committed
update test
1 parent 72ff18e commit f282911

File tree

19 files changed

+164
-154
lines changed

19 files changed

+164
-154
lines changed

domain-driven-design/java-web/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ java-web/
77
│ │ │ ├── com
88
│ │ │ │ └── javaweborder
99
│ │ │ │ ├── application/ # 应用层(协调领域逻辑,处理业务用例)
10-
│ │ │ │ │ ├── service/ # 服务层,业务逻辑目录
10+
│ │ │ │ │ ├── services/ # 服务层,业务逻辑目录
1111
│ │ │ │ │ │ └── OrderService.java # 订单应用服务
1212
│ │ │ │ │ └── dto/ # 数据传输对象(DTO)
1313
│ │ │ │ ├── domain/ # 领域层(核心业务逻辑和接口定义)
@@ -79,6 +79,7 @@ Starting server on http://localhost:8080 successfully.
7979

8080
# 测试用例
8181
$ mvn test
82+
$ mvn surefire:test -Dtest=com.javaweborder.TomcatServerTest
8283
# 展示测试结果
8384
```
8485

domain-driven-design/java-web/pom.xml

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<servlet-api.version>4.0.1</servlet-api.version>
2323
<jackson.version>2.16.0</jackson.version>
2424
<httpclient.version>5.2</httpclient.version>
25-
<junit.version>4.13.2</junit.version>
25+
<junit-jupiter.version>5.8.2</junit-jupiter.version>
2626

2727
<!-- 插件版本 -->
2828
<maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
@@ -71,11 +71,17 @@
7171
<version>${httpclient.version}</version>
7272
</dependency>
7373

74-
<!-- JUnit -->
74+
<!-- JUnit 5 依赖 -->
7575
<dependency>
76-
<groupId>junit</groupId>
77-
<artifactId>junit</artifactId>
78-
<version>${junit.version}</version>
76+
<groupId>org.junit.jupiter</groupId>
77+
<artifactId>junit-jupiter-api</artifactId>
78+
<version>${junit-jupiter.version}</version>
79+
<scope>test</scope>
80+
</dependency>
81+
<dependency>
82+
<groupId>org.junit.jupiter</groupId>
83+
<artifactId>junit-jupiter-engine</artifactId>
84+
<version>${junit-jupiter.version}</version>
7985
<scope>test</scope>
8086
</dependency>
8187
</dependencies>
@@ -92,8 +98,8 @@
9298
<compilerArgs>
9399
<arg>-Xlint:all</arg>
94100
</compilerArgs>
95-
<source>${maven.compiler.source}</source>
96-
<target>${maven.compiler.target}</target>
101+
<source>10</source>
102+
<target>10</target>
97103
</configuration>
98104
</plugin>
99105

@@ -151,12 +157,12 @@
151157
<artifactId>maven-surefire-plugin</artifactId>
152158
<version>${maven.surefire.plugin.version}</version>
153159
<!-- 测试配置 -->
154-
<!-- <configuration>
160+
<configuration>
155161
<skip>false</skip>
156162
<includes>
157163
<include>**/*Test.java</include>
158164
</includes>
159-
</configuration> -->
165+
</configuration>
160166
</plugin>
161167

162168
<!-- Maven Site Plugin -->
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package com.javaweborder;
2+
3+
import org.apache.catalina.Context;
4+
import org.apache.catalina.startup.Tomcat;
5+
import org.apache.catalina.connector.Connector;
6+
import javax.servlet.http.HttpServlet;
7+
import javax.servlet.http.HttpServletRequest;
8+
import javax.servlet.http.HttpServletResponse;
9+
import java.io.BufferedReader;
10+
import java.io.File;
11+
import java.io.IOException;
12+
import java.io.InputStreamReader;
13+
import java.net.HttpURLConnection;
14+
import java.net.URL;
15+
import org.junit.jupiter.api.Test;
16+
import static org.junit.jupiter.api.Assertions.assertEquals;
17+
18+
public class TomcatServerTest {
19+
20+
private final String helloResponseText = "Hello, World! 欢迎来到 Tomcat embedded server!";
21+
22+
@Test
23+
public void testTomcatServerStartup() throws Exception {
24+
// 创建嵌入式 Tomcat 实例并指定端口
25+
Tomcat tomcat = new Tomcat();
26+
int port = 8080;
27+
tomcat.setPort(port);
28+
29+
// 输出一些调试信息
30+
System.out.println("Initializing Tomcat server on port " + port + "...");
31+
32+
// 获取 Tomcat 的 Connector 信息
33+
Connector connector = tomcat.getConnector();
34+
System.out.println("Tomcat connector details: " + connector);
35+
36+
// 创建 Web 应用上下文
37+
String contextPath = "";
38+
String baseDir = new File("src/main/webapp").getAbsolutePath();
39+
System.out.println("Base directory for the web application: " + baseDir);
40+
41+
// 创建和添加上下文
42+
Context context = tomcat.addContext(contextPath, baseDir);
43+
System.out.println("Web application context added at: " + context.getPath());
44+
45+
// 添加一个简单的 Servlet
46+
Tomcat.addServlet(context, "HelloServlet", new HttpServlet() {
47+
@Override
48+
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
49+
resp.setContentType("text/html; charset=UTF-8");
50+
resp.getWriter().write(helloResponseText);
51+
}
52+
});
53+
context.addServletMappingDecoded("/hello", "HelloServlet");
54+
System.out.println("Servlet '/hello' mapped successfully.");
55+
56+
// 启动 Tomcat 服务器
57+
tomcat.start();
58+
System.out.println("Tomcat started successfully on port " + port + ".");
59+
60+
// 验证 /hello 请求
61+
testHelloRequest(port);
62+
63+
// 获取 Tomcat 服务器信息
64+
String serverInfo = tomcat.getServer().getStateName();
65+
System.out.println("Tomcat server info: " + serverInfo);
66+
67+
// 关闭 Tomcat 服务器,在测试场景下避免一直阻塞
68+
tomcat.stop();
69+
tomcat.destroy();
70+
}
71+
72+
private void testHelloRequest(int port) throws IOException {
73+
// 构建请求 URL
74+
URL url = new URL("http://localhost:" + port + "/hello");
75+
// 打开 HTTP 连接
76+
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
77+
// 设置请求方法为 GET
78+
connection.setRequestMethod("GET");
79+
80+
// 获取响应状态码
81+
int responseCode = connection.getResponseCode();
82+
// 验证响应状态码是否为 200
83+
assertEquals(200, responseCode, "响应状态码应为 200");
84+
85+
// 读取响应内容
86+
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
87+
StringBuilder response = new StringBuilder();
88+
String line;
89+
while ((line = reader.readLine()) != null) {
90+
response.append(line);
91+
}
92+
reader.close();
93+
94+
// 验证响应内容是否符合预期
95+
assertEquals(helloResponseText, response.toString(), "响应内容不符合预期");
96+
}
97+
}

domain-driven-design/java-web/test/java/com/javaweborder/interfaces/routes/OrderRoutesTest.java renamed to domain-driven-design/java-web/src/test/java/com/javaweborder/interfaces/routes/OrderRoutesTest.java

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,38 @@
1-
package test.java.com.javaweborder.interfaces.routes;
1+
package com.javaweborder.interfaces.routes;
22

3+
import com.fasterxml.jackson.databind.JsonNode;
34
import com.javaweborder.interfaces.controllers.OrderController;
4-
import com.javaweborder.application.services.OrderService;
5-
import com.javaweborder.infrastructure.repository.OrderRepository;
65
import org.junit.jupiter.api.AfterAll;
76
import org.junit.jupiter.api.BeforeAll;
87
import org.junit.jupiter.api.Test;
9-
8+
import com.fasterxml.jackson.databind.ObjectMapper;
109
import java.io.IOException;
1110
import java.io.OutputStream;
1211
import java.net.HttpURLConnection;
1312
import java.net.URL;
1413
import java.nio.charset.StandardCharsets;
1514
import java.util.Scanner;
16-
1715
import static org.junit.jupiter.api.Assertions.assertEquals;
1816

17+
// 导入 TomcatServer 类
18+
import com.javaweborder.TomcatServer;
19+
1920
public class OrderRoutesTest {
2021

2122
private static final String API_PREFIX = "/api";
2223
private static final String BASE_URL = "http://localhost:8080";
2324
private static Thread serverThread;
25+
private static final ObjectMapper objectMapper = new ObjectMapper();
2426

2527
@BeforeAll
2628
public static void setUp() throws Exception {
2729
// 启动嵌入式 Tomcat 服务器
2830
serverThread = new Thread(() -> {
29-
TomcatServer.main(new String[]{});
31+
try {
32+
TomcatServer.main(new String[]{});
33+
} catch (Exception e) {
34+
System.err.println("启动服务器时出错: " + e.getMessage());
35+
}
3036
});
3137
serverThread.start();
3238

@@ -37,23 +43,22 @@ public static void setUp() throws Exception {
3743
@AfterAll
3844
public static void tearDown() throws Exception {
3945
// 停止服务器
40-
serverThread.interrupt();
46+
if (serverThread != null) {
47+
serverThread.interrupt();
48+
}
4149
}
4250

4351
@Test
4452
public void testOrderRoutes() throws IOException {
4553
// 初始化依赖
46-
OrderRepository orderRepository = new OrderRepository();
47-
OrderService orderService = new OrderService(orderRepository);
48-
OrderController orderController = new OrderController(orderService);
49-
54+
OrderController orderController = new OrderController();
5055
// 初始化路由
5156
OrderRoutes.setupOrderRoutes(new Router(), orderController);
5257

5358
// 测试创建订单
5459
String createOrderResponse = sendRequest(BASE_URL + API_PREFIX + "/orders", "POST",
5560
"{\"customerName\": \"齐天大圣\", \"amount\": 99.99}");
56-
System.out.println("创建订单测试结果:");
61+
System.out.println("创建订单测试状态码:" + getLastResponseCode());
5762
System.out.println("响应体: " + createOrderResponse);
5863

5964
assertEquals(201, getLastResponseCode(), "创建订单测试失败");
@@ -63,22 +68,22 @@ public void testOrderRoutes() throws IOException {
6368

6469
// 测试获取订单
6570
String getOrderResponse = sendRequest(BASE_URL + API_PREFIX + "/orders/" + orderId, "GET", null);
66-
System.out.println("获取订单测试结果:");
71+
System.out.println("获取订单测试状态码:" + getLastResponseCode());
6772
System.out.println("响应体: " + getOrderResponse);
6873

6974
assertEquals(200, getLastResponseCode(), "获取订单测试失败");
7075

7176
// 测试更新订单
7277
String updateOrderResponse = sendRequest(BASE_URL + API_PREFIX + "/orders/" + orderId, "PUT",
7378
"{\"customerName\": \"孙悟空\", \"amount\": 11.22}");
74-
System.out.println("更新订单测试结果:");
79+
System.out.println("更新订单测试状态码:" + getLastResponseCode());
7580
System.out.println("响应体: " + updateOrderResponse);
7681

7782
assertEquals(200, getLastResponseCode(), "更新订单测试失败");
7883

7984
// 测试删除订单
8085
String deleteOrderResponse = sendRequest(BASE_URL + API_PREFIX + "/orders/" + orderId, "DELETE", null);
81-
System.out.println("删除订单测试结果:");
86+
System.out.println("删除订单测试状态码:" + getLastResponseCode());
8287
System.out.println("响应体: " + deleteOrderResponse);
8388

8489
assertEquals(204, getLastResponseCode(), "删除订单测试失败");
@@ -108,15 +113,33 @@ private String sendRequest(String urlString, String method, String body) throws
108113
while (scanner.hasNextLine()) {
109114
response.append(scanner.nextLine());
110115
}
116+
} catch (IOException e) {
117+
// 处理获取响应体时的异常
118+
System.err.println("获取响应体时出错: " + e.getMessage());
119+
if (connection.getErrorStream() != null) {
120+
try (Scanner errorScanner = new Scanner(connection.getErrorStream(), StandardCharsets.UTF_8)) {
121+
while (errorScanner.hasNextLine()) {
122+
response.append(errorScanner.nextLine());
123+
}
124+
}
125+
}
111126
}
112127

113128
connection.disconnect();
114129
return response.toString();
115130
}
116131

117132
private String extractOrderId(String jsonResponse) {
118-
// 简单的 JSON 解析,仅用于测试
119-
return jsonResponse.split("\"id\":")[1].split(",")[0].trim();
133+
try {
134+
// 使用 Jackson 解析 JSON
135+
JsonNode rootNode = objectMapper.readTree(jsonResponse);
136+
JsonNode dataNode = rootNode.get("data");
137+
// 检查是否存在 data 字段
138+
return dataNode.get("id").asText();
139+
} catch (IOException e) {
140+
System.err.println("解析订单 ID 时出错: " + e.getMessage());
141+
return null;
142+
}
120143
}
121144

122145
private static int lastResponseCode;

domain-driven-design/java-web/target/maven-archiver/pom.properties

Lines changed: 0 additions & 3 deletions
This file was deleted.

domain-driven-design/java-web/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst

Lines changed: 0 additions & 27 deletions
This file was deleted.

domain-driven-design/java-web/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)